Aurora MySQLのインスタンスパラメータグループの値をデフォルト値に設定をしたけどデフォルト値にならなかった話
はじめに
Aurora MySQLにはクラスターパラメータグループとインスタンスパラメータグループの2つがあります。今回、インスタンスパラメータグループの値をManagement Consoleで「デフォルト値に設定」したのですが、クラスターパラメータグループで設定していた値にならないという事象に遭遇しました。
環境
- Amazon Aurora MySQL 8.0
パラメータグループの優先順位のおさらい
Aurora MySQLでは、同じパラメータがクラスターとインスタンスの両方に存在する場合、以下のルールで適用されます。
- インスタンスパラメータグループで明示的に設定された値がある場合 → インスタンス側が優先
- インスタンスパラメータグループがデフォルト値(engine-default) の場合 → クラスターパラメータグループの値が適用
つまり、クラスター側で slow_query_log = 1 を設定し、インスタンス側がデフォルトであれば、スロークエリログは有効になるはずです。
何が起きたか
経緯
- クラスターパラメータグループで
slow_query_log = 1を設定 → スロークエリログが有効になった - 検証のため、インスタンスパラメータグループでも
slow_query_log = 1に変更 - 検証が終わったので、インスタンスパラメータグループをManagement Consoleから 「デフォルト値に設定」操作を実行
- スロークエリログが出なくなった
確認結果
MySQL上の実際の値を確認すると、OFFになっていました。
mysql> SHOW GLOBAL VARIABLES LIKE 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF |
+----------------+-------+
一方、インスタンスパラメータグループの状態を確認すると、Sourceは engine-default に戻っています。
$ aws rds describe-db-parameters \
--db-parameter-group-name <インスタンスパラメータグループ名> \
--query "Parameters[?ParameterName=='slow_query_log'].[ParameterName,ParameterValue,Source]" \
--output table
----------------------------------------------
| DescribeDBParameters |
+-----------------+-------+------------------+
| slow_query_log | None | engine-default |
+-----------------+-------+------------------+
クラスターパラメータグループも問題ありません。
$ aws rds describe-db-cluster-parameters \
--db-cluster-parameter-group-name <クラスターパラメータグループ名> \
--query "Parameters[?ParameterName=='slow_query_log'].[ParameterName,ParameterValue,Source]" \
--output table
---------------------------------
| DescribeDBClusterParameters |
+-----------------+----+--------+
| slow_query_log | 1 | user |
+-----------------+----+--------+
パラメータグループのステータスも in-sync で、pending-reboot ではありませんでした。
$ aws rds describe-db-clusters \
--db-cluster-identifier <クラスター名> \
--query "DBClusters[0].DBClusterMembers[].[DBInstanceIdentifier,DBClusterParameterGroupStatus]" \
--output table
-------------------------
| DescribeDBClusters |
+-----------+-----------+
| instance-2 | in-sync |
| instance-1 | in-sync |
+-----------+-----------+
解決方法
クラスターパラメータグループの slow_query_log を一度 0 に変更してから、再度 1 に戻します。動的パラメータなのでこれで即時反映されました。
まとめ
- インスタンスパラメータグループで「デフォルト値に設定」を実行すると、パラメータグループ上は
engine-defaultに戻るが、クラスターパラメータグループの値(ON)は反映されなかった - 復旧方法は、クラスターパラメータグループの値を一度変更して戻すこと
「デフォルト値に設定」はパラメータグループの定義をリセットするだけでなく、エンジンデフォルト値をインスタンスに即時適用します。しかしその後、クラスターパラメータグループの値を読み込み直してはくれません。この挙動の非対称さが、今回のハマりポイントでした。






