MySQL 8.0 では MySQLサーバーを操作する SQL の構文 として MySQL 5.7 から存在していた SHUTDOWN
に加え、新たに RESTART
が追加されました。
従来は ホストサーバーにログインしてコマンドラインからMySQL サーバーを再起動していましたが、MySQL 8.0 からは MySQLサーバーに接続してSQLでサーバーの再起動させることも可能になりました。
これらの構文を実行するには SHUTDOWN
権限が必要です。
MySQL :: MySQL 8.0 Reference Manual :: 13.7.7.8 RESTART Syntax
RESTART 構文
MySQLを再起動する場合、下記のSQLを実行します
1 |
mysql> RESTART; |
エラーログにRESTARTをどのユーザーが実行したかログに出力されます。
1 |
2018-09-18T07:59:40.257575Z 10 [System] [MY-011086] [Server] Received RESTART from user root. Restarting mysqld (Version: 8.0.12). |
再起動の処理について
RESTART
構文で再起動する場合、mysqld プロセスが監視されていて、停止時に再起動が行われる仕組みがあることが前提になります。
例えば、CentOS 7 の場合、systemd の設定ファイルに正常終了以外で停止した場合、再起動するようになっています。
1 2 3 4 |
$ cat /usr/lib/systemd/system/mysqld.service ...省略... Restart=on-failure ...省略... |
この仕組みを利用して、RESTART
構文を実行した場合、mysqld
プロセスは終了コードで 0 以外を返せば、systemd 側で mysqld プロセスを再起動してくれることになります。
下記のように RESTART
構文を実行した際の systemd のログでは異常終了を検知してMySQLをリスタートしていることがわかります。
1 2 3 4 5 6 7 8 |
$ sudo journalctl -u mysqld.service ...省略... Sep 19 06:30:07 localhost.localdomain systemd[1]: mysqld.service: main process exited, code=exited, status=16/n/a Sep 19 06:30:07 localhost.localdomain systemd[1]: Unit mysqld.service entered failed state. Sep 19 06:30:07 localhost.localdomain systemd[1]: mysqld.service failed. Sep 19 06:30:07 localhost.localdomain systemd[1]: mysqld.service holdoff time over, scheduling restart. Sep 19 06:30:07 localhost.localdomain systemd[1]: Starting MySQL Server... Sep 19 06:30:09 localhost.localdomain systemd[1]: Started MySQL Server. |
そのため、mysqld プロセスが監視されていない環境の場合、RESTART
構文を実行すると以下のようなエラーになります。
1 2 |
mysql> RESTART; ERROR: 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process). |
SHUTDOWN 構文
SHUTDOWN
構文は MySQL 5.7 から追加されていますが、ここでは改めて動作を確認しておきます。
MySQLを停止する場合は、以下のSQLを実行します
1 |
mysql> SHUTDOWN; |
RESTART
構文と同様に、エラーログに実行ユーザーが記録されます。
1 |
2018-09-18T08:01:55.897363Z 9 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.12). |
SHUTDOWN
構文は、mysqladmin shutdown
と同様の処理をSQLで行えるようになったものになります。
MySQL :: MySQL 8.0 Reference Manual :: 13.7.7.9 SHUTDOWN Syntax
まとめ
MySQL 8.0 では、my.cnf を書き換えなくても設定値の変更ができるSET PERSIST
構文も追加されています。RESET
構文と組み合わせることで、ホストサーバーにログインすることなく、設定値の変更から再起動による反映まで行うことができるようになりました。