Jaybanuan's Blog

どうせまた調べるハメになることをメモしていくブログ

MySQLのroot@localhostのパスワード設定

はじめに

とあるサンプルプログラムを実行することになったのだが、MySQLへの接続にアカウントがroot@localhostを利用し、なおかつabc123のようなパスワードで接続するようになっていた。 サンプルのあちこちにMySQLへのログインのコードがあるので、サンプルに合わせてMySQLのroot@localhostのパスワードを変更することにした。 そこで少し詰まったので、作業メモを残しておく。

作業メモ

初期状態のrootは、パスワードでのログインではなく、UNIXソケットを利用したログインになっているようだ。 普通にクライアントであるmysqlを実行すると、ソケットへのアクセス権がないためかログインに失敗するので、sudoで実行する。

$ sudo mysql -u root

ログインできたら、MySQLのユーザのログインの方式を確認してみる。

mysql> select user, host, plugin from mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | auth_socket           |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)

確かに、rootはUNIXソケット経由でのログインになっていそうだ。 そのため、他のユーザと同様にパスワードでのログインに変更する。

mysql> update mysql.user set plugin = 'caching_sha2_password' where user = 'root';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;

そして、rootのパスワードを設定しておく。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'abc123';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;

mysqlコマンドを終了して、次はパスワード認証を実施してみる。

mysql> quit;

$ mysql -u root -p

これでログインできていれば成功となる。

補足

ユーザ権限を特定の方法で変更した場合にflush privilegesを実行する必要があるそうだ。 実行タイミングまで調べきれていないので、とりあえず上記では認証方式の変更後とパスワード変更後に呼び出している。