Amazon Aurora DBクラスター(MySQL 互換エディション)のタイムゾーンを変更する

記事タイトルとURLをコピーする

コーヒーが好きな木谷映見です。暖かくなってきたので、今日は今年初のアイスコーヒーを淹れました。

本日は、Amazon Aurora DBクラスター(MySQL 互換エディション)のタイムゾーンの変更をやってみました。

Aurora DBクラスターのタイムゾーン変更手順

Aurora DBクラスター(MySQL 互換エディション)を立ち上げてすぐのタイムゾーンは以下のようになっています。
※実行時間:3/28(月)14:13

MySQL [xxxxxx_aurora]> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2022-03-28 05:13:26 |
+---------------------+
1 row in set (0.00 sec)

MySQL [xxxxxx_aurora]> SHOW VARIABLES LIKE '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.04 sec)

MySQL [xxxxxx_aurora]>
  1. このAurora DBクラスターに適用するカスタムDBクラスターパラメータグループを作成し、Aurora DBクラスターに適用しておきます。
  2. 適用したカスタムDBクラスターパラメータグループを開き、動的パラメータtime_zoneを検索して変更します。

default_time_zoneパラメータは、サーバーのタイムゾーンを参照します。このパラメータは変更できません。

このパラメーターtime_zoneの適用タイプは動的(dynamic)なので、変更に再起動や [すぐに適用] の操作は不要です。
MySQLからセッションを切断し再接続すると、以下のようにタイムゾーンが日本時間に変更されたことが分かります。
※実行時間:3/28(月)14:27

MySQL [xxxxxx_aurora]> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2022-03-28 14:27:16 |
+---------------------+
1 row in set (0.01 sec)

MySQL [xxxxxx_aurora]> SHOW VARIABLES LIKE '%time_zone%';
+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| system_time_zone | UTC        |
| time_zone        | Asia/Tokyo |
+------------------+------------+
2 rows in set (0.00 sec)

MySQL [xxxxxx_aurora]>

DBクラスターパラメータグループとDB インスタンスパラメータグループの違い

Amazon Auroraでは、time_zoneパラメータはクラスターレベルのパラメータです。デフォルト値はUTCで、time_zoneの値を変更すると、その変更がクラスター内のすべてのノードに適用されます。
今回はDBクラスターパラメータグループのパラメータ設定変更をおこないました。DBクラスターパラメータグループとDB インスタンスパラメータグループの違いについて簡単に記載します。

DBパラメータグループ

DB パラメータグループは、メモリバッファのサイズなど、Aurora DBクラスター内のDBインスタンス間で異なる可能性がある設定で利用します。

DBクラスターパラメータグループ

DB クラスターパラメータグループは、今回設定したタイムゾーンなど、Aurora DBクラスター内のすべての DB インスタンスに適用する設定で利用します。

おまけ:セッションレベルでタイムゾーンを設定

セッションのタイムゾーンは、DBクラスターパラメータグループのタイムゾーンより優先されます。ただし、これはそのセッションについてのみ維持されます。

SET time_zone = 'Europe/Helsinki'; コマンドを実行し、現在のセッションレベルでタイムゾーンを設定してみます。
※実行時間:3/28(月)14:56

MySQL [xxxxxx_aurora]> SET time_zone = 'Europe/Helsinki';
Query OK, 0 rows affected (0.01 sec)

MySQL [xxxxxx_aurora]> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2022-03-28 08:56:01 |
+---------------------+
1 row in set (0.00 sec)

MySQL [xxxxxx_aurora]> SHOW VARIABLES LIKE '%time_zone%';
+------------------+-----------------+
| Variable_name    | Value           |
+------------------+-----------------+
| system_time_zone | UTC             |
| time_zone        | Europe/Helsinki |
+------------------+-----------------+
2 rows in set (0.00 sec)

MySQL [xxxxxx_aurora]>

セッション切断⇒再接続します。
※実行時間:3/28(月)14:57

MySQL [xxxxxx_aurora]> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2022-03-28 14:57:34 |
+---------------------+
1 row in set (0.00 sec)

MySQL [xxxxxx_aurora]> SHOW VARIABLES LIKE '%time_zone%';
+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| system_time_zone | UTC        |
| time_zone        | Asia/Tokyo |
+------------------+------------+
2 rows in set (0.00 sec)

MySQL [xxxxxx_aurora]>

↑DBクラスターパラメータグループで設定されたAsia/Tokyoに戻りました。

おまけ:データベースレベルでタイムゾーンを設定しようとするとエラー

SET GLOBAL time_zone = ‘Europe/Helsinki’;コマンドを実行し、データベースレベルのタイムゾーンを設定しようとするとエラーになります。

MySQL [xxxxxx_aurora]> SET GLOBAL time_zone = ‘Europe/Helsinki ;
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation
MySQL [xxxxxx_aurora]>

グローバル変数を設定するにはSUPER権限が必要ですが、AuroraのマスターユーザーにSUPER権限はありません。 Auroraでタイムゾーンを変更する場合はDBクラスターパラメーターグループに対して設定が必要となります。

参考

aws.amazon.com

dev.mysql.com

docs.aws.amazon.com

aws.amazon.com

emi kitani(執筆記事の一覧)

AS部LX課。2022/2入社、コーヒーとサウナが好きです。執筆活動に興味があります。AWS認定12冠。