はじめに
とあるサンプルプログラムを実行することになったのだが、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を実行する必要があるそうだ。 実行タイミングまで調べきれていないので、とりあえず上記では認証方式の変更後とパスワード変更後に呼び出している。