MySQL5.7の初期パスワードを非対話で変更する

カテゴリ: MySQL | タグ: , , ,

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コマンドを実行すると良いです。

こちらもおススメ

One thought on “MySQL5.7の初期パスワードを非対話で変更する

コメントを残す

メールアドレスが公開されることはありません。