MySQLは、バージョン5.7からインストール直後に、rootユーザの初期パスワードとしてランダム文字列がセットされるようになりました。ですが、非対話でサーバのセットアップを行う場合、初期のパスワードがランダム文字列だと都合が悪い場合があります。
そこで、今回は、MySQL5.7以降でrootユーザのパスワードを上手に扱う方法を説明します。
初期パスワードを確認する
MySQL5.7以降では、rootユーザの初期パスワードが/var/log/mysqld.logに保存されています。
初期パスワードは、ログファイル内で'A temporary password is generated'を含む行に入っているので下記のコマンドで確認できます。
grep 'A temporary password is generated' /var/log/mysqld.log
2017-11-03T10:58:00.566118Z 1 [Note] A temporary password is generated for root@localhost: Js;?/d7cr9y_
上記の場合、初期パスワードは'Js;?/d7cr9y_'です。
初期パスワードを抽出してbash変数に格納する
パスワードは、"A temporary password is generated"が記載された行に、"root@localhost: "の後ろに記載されているので、下記のワンライナーでパスワードだけ抽出できます。
grep "A temporary password is generated" /var/log/mysqld.log | sed -s 's/.*root@localhost: //'
Js;?/d7cr9y_
さらに、これをbash変数に格納するためには、以下のようにすればよいです。
DB_PASSWORD=$(grep "A temporary password is generated" /var/log/mysqld.log | sed -s 's/.*root@localhost: //')
echo ${DB_PASSWORD}
Js;?/d7cr9y_
echoコマンドでパスワード文字列だけ出力できれたことが確認できました。
bash変数に格納したパスワードでMySQLにログインする
この情報を元にDBにつなぐには、mysqlコマンドの-pオプションの後に、セットしたbash変数を指定します。
DB_PASSWORD=$(grep "A temporary password is generated" /var/log/mysqld.log | sed -s 's/.*root@localhost: //')
mysql -u root -p${DB_PASSWORD}
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.20
...
mysql >
ログインし、"mysql >"のプロンプトが出るのが確認できました。
rootユーザのパスワードを非対話で変更する
パスワードの変更はALTER USERして、その後flush privilegesしてあげればよいです。非対話でコマンドを実行するには--connect-expired-password
オプションが必要なので、これも指定します。
NEW_DB_PASSWORD='D@%JzuBdf(yf'
echo ${NEW_DB_PASSWORD}
D@%JzuBdf(yf
mysql -uroot -p${DB_PASSWORD} --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${NEW_DB_PASSWORD}'; flush privileges;"
パスワード変更後、新しいパスワードでログインしてみると、変更が成功したことが分かります。
mysql -uroot -p'D@%JzuBdf(yf'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.20
...
mysql >
コマンドラインでパスワードを直接入力すると、historyコマンドでパスワードが残ってしまうので、最後にhistory -c
コマンドを実行すると良いです。
2 thoughts on “MySQL5.7の初期パスワードを非対話で変更する”