[MySQL] rootのパスワードを忘れたので再設定する

AmazonLinux上にインストールしたMySQL5.7のrootのパスワードを忘れてしまったので再設定を行います。

基本的に公式ドキュメントの内容に沿った形で実施していきますが、日本語のドキュメントのバージョンがちょっと古いので5.7に合わせてあります。

rootのパスワード再設定

パスワード無しでログイン可能な状態にする

IDもパスワードも無い匿名ユーザーでmysqlを実質rootユーザーとして自由自在に操作できる状態にします。運用中のサーバでこれを行うとセキュリティ的にかなり危ない状態になりますので、必ず利用者がいない状況で行う必要があります。

今回は「my.cnf」に設定を書きます。skip-grant-tablesで認証をOFFに、skip-networkingで外部(リモート)からの接続を禁止します。

$ sudo vi /etc/my.cnf
[mysqld]
....
skip-grant-tables
skip-networking
....

したらば再起動をして設定を反映します。

$ sudo service mysqld restart
Stopping mysqld:       [  OK  ]
Starting mysqld:       [  OK  ]

実際にログインできるか試してみます。

$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.27 MySQL Community Server (GPL)
()

mysql> 

入れた(゚д゚)!

パスワードを変更する

MySQL内に格納されているパスワードを書き換えます。これはUPDATE文を実行するだけ。

USE mysql;

UPDATE user SET authentication_string=PASSWORD('abcdefghijklmn12345')
WHERE User='root';

最後にFLASHして確実に反映させます。

FLUSH PRIVILEGES;

MySQLクライアントは一度終了し、シェルに戻ります。

mysql> \q
$

なおMySQL5.6まではカラム名がPasswordでしたが、5.7からauthentication_stringへ変更になっている点に注意が必要です。

確認とお掃除

実際にログインできるか確認します。

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.27 MySQL Community Server (GPL)
(中略)

mysql> 

できたー!
_/\○_ヒャッ ε=\___○ノホーウ!!

喜びで忘れないうちに設定を戻しておきます。削除しても良いですし、以下のようにコメントアウトしておきます。またやる羽目になるかもしれないですしね(;´∀`)

$ sudo vi /etc/my.cnf
[mysqld]
....
# skip-grant-tables
# skip-networking
....

再起動して設定を反映させます。

$ sudo service mysqld restart
Stopping mysqld:       [  OK  ]
Starting mysqld:       [  OK  ]

匿名ユーザーでログインできなければ成功です。

$ mysql
ERROR 1045 (28000): Access denied for user 'ec2-user'@'localhost' (using password: NO)

余談

参考ページ