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権限でまた作業できるようになりました。
おつかれさまでした!
コメント