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)
余談
MySQLのrootのパスワード忘れたから、一時的に認証を無効にしようと思ってmy.cnf開いたら過去の自分も同じことをやっており、進歩してないのを痛感したときに感じる恋しさと せつなさと 心強さと。 pic.twitter.com/QkUcC3m9I9
— 勝部麻季人⛺ (@katsube) 2019年12月14日