iku8log

Webエンジニアのタダのメモ。

EC2 Linux2上に立てた、MySQL5.7のタイムゾーンをJSTにする

EC2 Linuxと書いていますが、あまり関係はなくMySQL5.7のタイムゾーン設定のメモです。

my.confにタイムゾーンの設定を書くだけだとうまく反映されず Fatal error: Illegal or unknown default time zone 'Asia/Tokyo' となってしまったので、メモ。

MySQL起動

my.cnfにタイムゾーンを設定して起動すると、コケて起動しないので、 まずはmy.cnfを何もいじらず起動する。

sudo systemctl start mydqld
sudo systemctl status mydqld

mysqlタイムゾーン初期化

参考: MySQLでタイムゾーンを設定する - Qiita

どうやらMySQLタイムゾーンがバカになっているので、初期化する

/usr/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo > ~/timezone.sql
mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root -p

パスワードを求められ、入力後初期化が実行される

再起動時にコケる可能性があり、念の為一度MySQLを停止しておく。

sudo systemctl stop mydqld

タイムゾーン設定

/etc/my.cnfに設定を追記する。

[mysqld]
default-time-zone='Asia/Tokyo'

起動

sudo systemctl start mydqld
sudo systemctl status mydqld

これでNOW()関数を実行していみると、JST時間で表示されると思います。 SHOW VARIABLES LIKE '%time_zone%'; 上記のクエリで、タイムゾーンの設定が見え、JSTになっていることが分かります。