Amazon RDS はインスタンスのスペックに応じて、自動でDBパラメータを調整してくれるのが売りでもありますが、どうしても変更したいパラメータがあったりします。有名なところでは
- max_allowed_packet
- character_set_xxx 系
この辺りのパラメータや、もっと重いパラメータ(クエリキャッシュの有効化等) 変更時に、DBリブートはかかるのか、かけなくていいのかを検証します。今回はとりあえずMySQLです。
リブートが掛かっていないかの確認
スクリプトを用意しました。しょうもないスクリプトですが、使ってください。
#!/bin/bash while : do dt=$(date) state=$(timeout 5 mysqladmin ping -u-p -h ) echo $dt-$state sleep 1 done
failoverをやった場合に、 mysqladmin
が接続を掴んで離さず、正確な停止時間が測れなかったので、 timeout
を使ってみます。今回はfailover関係ないですが、一応入れたままで使います。 使い方は
$ ./mysqlping.sh > reboot.txt & $ tail -f reboot.txt
とか、 tee
でもいいですよ。
中身未設定のParameter Groupsを適応した場合
Parameter Groups を作成し、RDS Instance に適応しただけではリブートはかかりませんでした。 但し、マネジメントコンソールの表示は下記のように変化します。 設定直後
設定後しばらくたったらpending reboot
となります。リブートは自動でかからないけど、リブートしないとParameter Groupsとして、 paramtest
は適応しないよ!という意味です。そのため、手動リブートが必要です。
Dynamicなパラメータを変更する
Parameter Groupsの設定画面で下記のような列があります。
これ、だいたい分かりますよね?たぶん
- Dynamic = DBリブート不要
- Static = DBリブート必要
だろうと、そう思ったら検証です。 Dynamic でおそらくいちばん弄られているであろうパラメータを下記のように変更します。
先の工程で、 paramtest
というのを一旦空で作成し、適用だけはしているので、マネジメントコンソールで確認すると、一旦 applying
になり、
すぐに in-sync
となります。リブートは自動で掛かることもないし、掛ける必要も無いです。
Staticなパラメータを変更する
今度はリブートが必要であろうパラメータ query_cache_type
を変更します。このパラメータは文字通りのクエリーキャシュですね。MySQLというかRDSはデフォルトNOなのか、、へぇそうなんだ。まずは変更前に mysql
コマンドで直接確認。
mysql> show variables like 'query_cache_%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 1048576 | | query_cache_type | OFF | | query_cache_wlock_invalidate | OFF | +------------------------------+---------+ 5 rows in set (0.00 sec)
OFFですね。ではマネジメントコンソールで変更した直後のステータスは
でた、 pending reboot
ということですので、手動でリブートする前に、パラメータ確認しましょう。
mysql> show variables like 'query_cache_%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 1048576 | | query_cache_type | OFF | | query_cache_wlock_invalidate | OFF | +------------------------------+---------+ 5 rows in set (0.00 sec)
OFFのまんまですね。
では、手動リブートし、しばらくした後確認したら。
mysql> show variables like 'query_cache_%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 1048576 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+---------+ 5 rows in set (0.01 sec)
ONになったよ!
まとめ
- Parameter Groups の変更や、割り当て作業で、自動でリブートかかることはない。
- Dynamicのパラメータ変更については、リブート不要。但し、Parameter GroupsのDBインスタンスへ割り当てと、同時に実行するなら、リブートは必要。
- Staticのパラメータについては、リブート必須。
とりあえず、RDSを立てたら、問答無用で Parameter Groups を一個作成し、適応、そしてリブートまでかけておけば、後からDynamicパラメータ変更となってもリブートの心配は不要ですし、損はないです。
元記事はこちらです。
「RDSでParameter Groups変更時のDBリブートについて調査してみた」