コーヒーが好きな木谷映見です。暖かくなってきたので、今日は今年初のアイスコーヒーを淹れました。
本日は、Amazon Aurora DBクラスター(MySQL 互換エディション)のタイムゾーンの変更をやってみました。
- Aurora DBクラスターのタイムゾーン変更手順
- DBクラスターパラメータグループとDB インスタンスパラメータグループの違い
- おまけ:セッションレベルでタイムゾーンを設定
- おまけ:データベースレベルでタイムゾーンを設定しようとするとエラー
- 参考
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]>
- このAurora DBクラスターに適用するカスタムDBクラスターパラメータグループを作成し、Aurora DBクラスターに適用しておきます。
- 適用したカスタム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クラスターパラメーターグループに対して設定が必要となります。
参考
emi kitani(執筆記事の一覧)
AS部LX課。2022/2入社、コーヒーとサウナが好きです。執筆活動に興味があります。AWS認定12冠。