🕰️ MariaDBの時間がズレる?──Tokyoを教える「隠し呪文」mysql_tzinfo_to_sql の話

WordPress/サーバー設定

default_time_zone = 'Asia/Tokyo'」って設定したのに、
MariaDBが「Unknown time zone ‘Asia/Tokyo’」って怒って止まったこと、ありませんか?

実はこれ、あなたが悪いわけでもサーバーが壊れているわけでもなく、
MariaDBがまだ「Tokyoという人」を知らないだけなんです。


1. そもそもMariaDBはUTCが基本

MariaDB(MySQL系)は、世界共通で使うために内部ではUTC(協定世界時)を基準に動いています。
日本時間(JST)を使うには、システム側で「Tokyo=JSTだよ」と教えてあげる必要があるんです。

default_time_zone = 'Asia/Tokyo'

でも、MariaDBはデフォルトでは「Asia/Tokyo」の意味を知らない。 結果、こんなエラーになります👇

ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Tokyo'

2. 解決策:「隠し呪文」を唱えるだけ

この一行を実行すればすべて解決します👇

mysql_tzinfo_to_sql /usr/share/zoneinfo | sudo mysql -u root mysql

このコマンドは、OSが持っているタイムゾーン情報をMariaDBに取り込む魔法です。
つまり「TokyoはUTC+9の場所だよ」と教えてあげる作業。

最近のMariaDBでは名前が変わっています:

mariadb-tzinfo-to-sql /usr/share/zoneinfo | sudo mariadb -u root mysql

実行後にMariaDBを開いて確認してみましょう。

SHOW VARIABLES LIKE '%time_zone%';
出力例:

+------------------+------------+
| Variable_name | Value |
+------------------+------------+
| system_time_zone | JST |
| time_zone | Asia/Tokyo |
+------------------+------------+

これで、MariaDBが無事に「Tokyo」を理解しました🎉


3. なぜこの呪文が必要なのか?

/usr/share/zoneinfo は、OSが持っているタイムゾーン定義ファイルです。 MariaDBはそれを直接読めないので、mysql_tzinfo_to_sql が 「SQL文に変換して取り込む」役割を果たします。

つまり仕組みとしては:

[OSのzoneinfoファイル] → [SQLに変換] → [MariaDBのmysql.time_zoneテーブルへ登録]

これを一度やっておくと、default_time_zone='Asia/Tokyo' が正常に動作します。


4. 永続化の設定

一度取り込んだら、/etc/my.cnf.d/server.cnf に 次の設定を追記しておきましょう。

[mysqld]
default_time_zone = 'Asia/Tokyo'

そしてMariaDBを再起動:

sudo systemctl restart mariadb

確認コマンド:

SELECT NOW(), @@global.time_zone, @@session.time_zone;
結果例:

+---------------------+--------------------+---------------------+
| NOW() | @@global.time_zone | @@session.time_zone |
+---------------------+--------------------+---------------------+
| 2025-10-31 22:00:00 | Asia/Tokyo | Asia/Tokyo |
+---------------------+--------------------+---------------------+

これでMariaDB・PHP・WordPressのすべてがJST(東京時間)で統一されます。


5. まとめ:「隠し呪文は公式だった」

mysql_tzinfo_to_sql は、実は「隠し呪文」でもなんでもなく、 英語版マニュアルにだけひっそり書かれている正式手順なんです。

でも日本語サイトではほとんど触れられていないので、 「Asia/Tokyo を設定したら止まった💥」という人が後を絶たないのが現状。

というわけで——

💬 default_time_zone=’Asia/Tokyo’ で止まった人は、
この呪文を唱えるべし:
mysql_tzinfo_to_sql /usr/share/zoneinfo | sudo mysql -u root mysql

たった一行で、あなたのMariaDBは「Tokyo」を覚えます🌏✨


📩 info@hd0.biz
この記事は「masaやん」によって作成されました。

コメント