MySQL 8.0でrootパスワードをリセットする方法


MySQLのrootパスワードを忘れたり紛失したりするという不幸な出来事では、どういうわけかそれを回復する方法が確実に必要になります。知っておくべきことは、パスワードがusersテーブルに格納されているということです。これは、MySQL認証を回避する方法を考え出す必要があることを意味します。それでパスワードレコードを更新することができます。

幸いにも、達成するのが簡単で、このチュートリアルはMySQL 8.0バージョンでrootパスワードを回復またはリセットするプロセスを通してあなたを導きます。

MySQLのドキュメントによると、ルートMySQLパスワードをリセットする方法は2つあります。両方を見直します。

-init-fileを使用してMySQLルートパスワードをリセットする

rootパスワードをリセットする方法の1つは、ローカルファイルを作成し、次に示すように --init-file オプションを使用してMySQLサービスを開始することです。

# vim /home/user/init-file.txt

ファイルがmysqlユーザーによって読み取り可能であることを確認することが重要です。そのファイル内に以下を貼り付けます。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

上記で「 new_password 」を使用するパスワードに変更します。

MySQLサービスが停止していることを確認してください。次のことができます。

# systemctl stop mysqld.service     # for distros using systemd 
# /etc/init.d/mysqld stop           # for distros using init

その後、次のコマンドを実行してください。

# mysqld --user=mysql --init-file=/home/user/init-file.txt --console

これによりMySQLサービスが開始され、その過程で作成したinitファイルが実行され、rootユーザーのパスワードが更新されます。パスワードをリセットしたら、必ずファイルを削除してください。

その後は必ずサーバを停止し、通常どおりに起動してください。

# systemctl stop mysqld.service        # for distros using systemd 
# systemctl restart mysqld.service     # for distros using systemd 

# /etc/init.d/mysqld stop              # for distros using init
# /etc/init.d/mysqld restart           # for distros using init

これで、新しいパスワードを使用してrootとしてMySQLサーバに接続できるはずです。

# mysql -u root -p

-skip-grant-tablesを使用したMySQLルートパスワードのリセット

2番目の選択肢は、MySQLサービスを --skip-grant-tables オプションで開始することです。この方法でサービスを開始すると、すべてのユーザーがパスワードなしで接続できるため、これは安全性が低くなります。

サーバーが起動されると --skip-grant-tables --skip-networking のオプションが自動的に有効になり、リモート接続が利用できなくなります。

まずMySQLサービスが停止していることを確認してください。

# systemctl stop mysqld.service     # for distros using systemd 
# /etc/init.d/mysqld stop           # for distros using init

それから次のオプションでサービスを開始してください。

# mysqld --skip-grant-tables --user=mysql &

それから、あなたは単に実行することによってmysqlサーバーに接続することができます。

# mysql

サービスが --skip-grant-tables オプションで開始されるとアカウント管理が無効になるので、権限をリロードする必要があります。そうすれば、後でパスワードを変更できるようになります。

# FLUSH PRIVILEGES;

これで、次のクエリを実行してパスワードを更新できます。必ず「new_password」を実際のパスワードで変更してください。

# ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_passowrd';

MySQLサーバを停止して、通常通りに起動します。

# systemctl stop mysqld.service        # for distros using systemd 
# systemctl restart mysqld.service     # for distros using systemd 

# /etc/init.d/mysqld stop              # for distros using init
# /etc/init.d/mysqld restart           # for distros using init

新しいパスワードで接続できるはずです。

# mysql -u root -p

また、MySQL関連の記事に続いてこれらの便利な記事を読むのが好きかもしれません。

  1. How to Install MySQL 8 in CentOS, RHEL and Fedora
  2. 15 Useful MySQL Performance Tuning and Optimization Tips
  3. 12 MySQL Security Practices for Linux
  4. 4 Useful Commandline Tools to Monitor MySQL Performance
  5. MySQL Database Administartion Commands

この記事では、MySQL 8.0サーバーのパスワードを忘れた場合のリセット方法を学びました。そのプロセスが簡単だったことを私は願っています。