MySQL5.7でrootのパスワード忘れてログインできない!時の対応

MySQL5.7でrootのパスワード忘れてログインできない!時の対応

このページではMySQL5.7で

「rootのパスワード忘れてログインできない!!」

そんなトラブルの解決方法を書いています。

ここではCentOS7を例に挙げて説明していますが、MySQLの起動方法さえ変えればWindows/Mac/DebianLinux/Ubuntuなど他のOSにも応用できますので、ぜひ参考にしてみてください。

rootでログインできない・・・

誰しも一度は経験あるのではないでしょうか?久しぶりに管理者rootでログインしようと思ったら

# mysql -uroot -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

あれ?パスワードなんだっけ・・・?
ヤ・・ヤベェ!!

めちゃくちゃ焦りますよね?

でも、安心してください。
MySQLのrootは失っても、OSのroot権限さえあれば一瞬で復旧できます。

rootパスワード変更の手順

このトラブルを解決するにはrootのパスワード自体を更新します。
通常はパスワードがないとできませんが、今回はパスワードなしで実行できる方法を紹介します。

(ちなみにCentOS6までと違い、mysqld_safeは使えなくなっています。)

MySQLサーバーの停止

MySQLサーバーの停止をします。

# systemctl stop mysqld

パスワード認証なしでログイン可能にする設定

MySQLサーバーでユーザー全員が全テーブルをパスワード認証を無しでログイン可能になる機能を使います。

具体的にはmy.cnfの設定に以下の設定をします。

  • skip-grant-tablesという行を追加
  • validate_password_***系の設定があれば無効にする
# vi /etc/my.cnf

[mysqld]の直下に以下を追加

[mysqld]

skip-grant-tables  ←この行を追加
#validate_password_policy=LOW ←コメントアウト
#validate_password_length=8 ←コメントアウト

※わかりやすいように直下に書いていますが、[mysqld]の中ならどこでも大丈夫です。

MySQLサーバーの起動

パスワード認証なしログインの設定を反映させた状態で再び起動します。

# systemctl start mysqld

rootでパスワードなしでログイン

skip-grant-tablesのおかげでパスワードなしでrootログインができるようになっています。

# mysql -u root

SQLでパスワードを変更する

次のSQLを実行してrootのパスワードを変更します。●のところは新しいパスワードに変えて実行してください。

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('●●●●●') WHERE user='root' AND host='localhost';

【おまけ】いつものパスワード変更は使えない

ちなみに、いつもやっているようなパスワード変更のクエリやコマンドはエラーが出て使えません

こんなのや

SET PASSWORD = PASSWORD('●●●●●');

これもだめです

mysqladmin -u root password

エラーが出ます

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

パスワードなし設定を削除して再起動

パスワードの変更に成功したらskip-grant-tablesはもう用済みなので必ず消しておきましょう。

validate_password_***をコメントアウトしたならそれも戻します。

vi /etc/my.cnf
[mysqld]

skip-grant-tables  ←この行を削除

validate_password_policy=LOW ←コメント戻す
validate_password_length=8 ←コメント戻す

設定を反映させるため再起動

# systemctl restart mysqld

パスワード入力で接続できることを確認

今度はパスワード入力を求められるので、それで接続できるか確認します。

# mysql -uroot -p

ここまで出来たら終了です。

root権限でまた作業できるようになりました。

おつかれさまでした!

コメント

タイトルとURLをコピーしました