Posted at

MySQL 8.0 新機能 Persisting configuration variables

More than 1 year has passed since last update.

この記事は MySQL Casual Advent Calendar 2016 の7日目です。

MySQL 8.0 Developer Milestone Release (ベータ版みたいなもの) が9月にリリースされました。

MySQL 8.0 で導入された「Persisting configuration variables」について紹介します。


これまで(MySQL 5.7まで)の設定変更の手順とその課題

MySQL の設定には、再起動不要で動的に変更できるものと、できないものがあります。

動的に設定変更するには SET GLOBAL を実行します。

例)wait_timeout の変更

mysql> SET GLOBAL wait_timeout=60;

Query OK, 0 rows affected (0.00 sec)

SET GLOBALは現在起動中のMySQLのみに影響を及ぼします。

そのため、MySQLが再起動したときに備えて設定ファイル(my.cnf)も、設定した値にあわせて編集しておく必要があります。

// SET GLOBAL に加えて設定ファイルの編集が必要

$ sudo vi /etc/my.cnf

この仕組みには以下のような課題があります。


  1. 2つ変更しないといけないので面倒。特にサーバ台数が多い場合ツライ。

  2. my.cnf の編集を忘れがち。再起動したら設定が戻ってしまった:scream: など事故のもとに・・・

  3. DB管理者にファイルを編集させるためOSアカウントを与えないといけない

個人的には3つ目が一番の課題だと感じています。DB管理者がユーザデータにアクセスできないようDBアカウントの権限分離をしていたとしても、OSレイヤーからアクセスできてしまっては意味がありません。


Persisting configuration variables

Persisting configuration variables を使うことで上記の課題を解決できます。

※ Oracle Database を使ったことがある方は、SPFILEと同じものだと考えて頂ければよいでしょう。

設定変更時に SET GLOBAL の代わりに SET PERSIST を使います。

mysql> SHOW GLOBAL VARIABLES LIKE 'wait_timeout';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)

mysql> SET PERSIST wait_timeout = 60;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 60 |
+---------------+-------+
1 row in set (0.00 sec)

SET PERSIST では、このようなJSONファイルが生成されます。

$ sudo cat /var/lib/mysql/mysqld-auto.cnf

{ "mysql_server": {"wait_timeout": "60" } }

この設定ファイルは再起動時に読み込まれるので、my.cnf を手オペで編集する必要はもうありません!

SQLでファイルを編集できるため、OSアカウントをDB管理者に与える必要もなくなりました。

ちなみにデフォルト値に戻すと、mysqld-auto.cnf から、ちゃんと消えてくれます。

mysql> SET PERSIST wait_timeout =  28800;

Query OK, 0 rows affected (0.00 sec)

$ grep wait_timeout /etc/my.cnf

$ sudo cat /var/lib/mysql/mysqld-auto.cnf
{ "mysql_server": { } }

以上 Persisting configuration variables の紹介でした。