mysql のパスワード変更

June 09, 2019

MySQL の root パスワード変更をするときにハマってしまったのでメモしておく。 実行環境は Ubuntu 19.04 MySQL 5.7。

MySQL を止める

$ sudo systemctl stop mysql

パスワードなしでログインできる MySQL を起動する

UNIXドメインソケットが読み書きできないので、所有権を設定するのを忘れないように。

$ sudo mkdir -p /var/run/mysqld
$ sudo chown mysql:mysql /var/run/mysqld
$ sudo mysqld_safe --skip-grant-tables &

MySQL へ接続する

この方法でパスワード変更した場合は、ネイティブ認証プラグインが設定されていないので そのプラグインの組み込みもする。

$ mysql -uroot mysql
mysql> update user set authentication_string=PASSWORD("mynewpassword") where user='root';
mysql> update user set plugin = 'mysql_native_password' where user = 'root';
mysql> flush privileges;
mysql> quit

MySQL を再起動する。

mysqld_safe でけでなく、mysqld も起動しているのでそれも停止する。

$ sudo kill -9 <mysqld_safe_pid>
$ ps aux | grep mysql
$ sudo kill -9 <mysqld_pid>
$ sudo systemctl start mysql

ログインできるようになれば完了

$ mysql -uroot -pmynewpassword

補足1

MySQL の初期パスワードは /var/log/mysqld.log にある。筆者は消してしまっていてわからなくなったので上記手順で行った。

$ cat /var/log/mysqld.log | grep 'temporary password'

補足2

MySQL のパスワードポリシーは初期だと 文字列長8、大文字・小文字・数値・特殊文字を含む必要があるため変更するには、グローバル変数を変更する。

mysql> SET GLOBAL validate_password_length=4;
mysql> SET GLOBAL validate_password_policy=LOW;

Profile picture

Shigeru Kondo ソフトウェア業界で20年になります。認定スクラムマスター。主に Web アプリのエンジニアをやっています。フロントエンド、バックエンド、インフラと幅広くやっております。お気楽にお問い合わせください。 Twitter