サイトアイコン Lonely Mobiler

MySQL の root パスワードを忘れたので復旧した

久しぶりにあるサーバーの MySQL を操作しようとしたところ、root パスワードを忘れてしまいログインできなくなってしまった。

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

実は以前にもパスワードを忘れた事がある。八年ぶり二度目らしい。

MySQL の root パスワードをリセットした。 | Lonely Mobiler

この記事にもある通り MySQL ではそのような場合に備え、root パスワードを再設定する方法が用意されている。しかし、以前の記事はかなり古いので新しい方法をメモしておこう。

MySQL の root パスワードを再設定する方法

今回は Ubuntu 18.04 + MySQL 5.7.29 で作業する。OS によるコマンドの差異や設定ファイルのパスなどは都度読み替えてほしい。

MySQL 5.7 では設定ファイルより skip-grant-tables を有効にすることで権限を無視して MySQL へログインできるようだ。mysqld.cnf を編集しよう。

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

# コメントアウトを外す skip-grant-tables

編集したら MySQL を再起動

$ sudo service mysql restart

MySQL にパスワード無しで入れるはず。

$ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 38517 Server version: 5.7.29-0ubuntu0.18.04.1 (Ubuntu)

mysql>

mysql テーブルに変更してパスワードを変更しよう。

mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A

Database changed

mysql> mysql> update user set authentication_string=password('example') where user='root'; Query OK, 0 rows affected, 1 warning (0.02 sec) Rows matched: 1 Changed: 0 Warnings: 1

mysql> flush privileges; Query OK, 0 rows affected (0.20 sec)

これで新しいパスワードになった。

ここまでできたら再度 mysqld.cnf を編集して skip-grant-tables をコメントアウトし、 mysqld を再起動しよう。

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

# コメントアウトする #skip-grant-tables

$ sudo service mysql restart

これで再設定したパスワードでログインできるはずだ。

Sponsored Link
モバイルバージョンを終了