[MySQL] タイムゾーンを変更する

2019-03-20環境AWS,SQL

EC2 上の MySQL で UTC だったタイムゾーンを、カナダ・バンクーバー時間に変える

環境

OS (Amazon Linux) タイムゾーン : UTC
PHP タイムゾーン         : America/Vancouver
MySQL タイムゾーン       : UTC ⇨ これをバンクーバー時間にする

現在のタイムゾーンを確認

下記 SQL 文で確認できる
show variables like '%time_zone%';
system_time_zone : UTC
time_zone : SYSTEM

MySQL タイムゾーンデータの確認

タイムゾーンを設定するには、time_zone というテーブルにデータが入っていなければならない
それがあるか確認する

select * from mysql.time_zone;
空の場合は、データをインポートする

タイムゾーンのインポート

$ sudo mysql_tzinfo_to_sql /usr/share/zoneinfo

インポートが完了したら、テーブルにデータ入ってることを確認

下記のように、後ろに MySQL への接続情報を記載するよう書いてあるが、これだとエラーになった
「コマンドは、MySQL に接続していない状態で実行します。」 という記述を見かけたので、接続したままコマンド実行したからかも。。。

mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u hoge mysql -p
エラー内容
Warning: Unable to load '/usr/share/zoneinfo//iso3166.tab' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo//leapseconds' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo//tzdata.zi' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo//zone.tab' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo//zone1970.tab' as time zone. Skipping it.

/etc/my.cnf にタイムゾーンの設定を追加

書き込み権限がない場合には、一時的に書き込み権限を与えておく
$ sudo vi /etc/my.cnf
[mysqld]
default-time-zone = 'America/Vancouver'
[mysqld_safe]
timezone = 'America/Vancouver'
service mysqld restart

タイムゾーンが変わったことを確認

system_time_zone : PDT (Pacific daylight time)
time_zone : America/Vancouve

今はサマータイムだから PDT
サマータイムが終わったら、自動で PST ( Pacific standard time )に変わるはず



以上

Posted by Agopeanuts