MySQL素人がWindows版で3rd partyユーティリティからの接続を使えるようにした話
終わってみればどうということはないけれど
正解に行きつくまで、正直なところ相当苦労した。いや、ぼくの MySQL 力がしょぼいせいだけど。
何が問題だったのか
かいつまんで書くとこんなところ。
- 開発にも使っている自分の Windows PC に、 MySQL Community Edition 8.0 をインストール
- 起動モードは Windows Service に設定 (Window なので)
- 同時にインストールできる MySQL Workbench から接続に行くと普通に使える(まぁ、当たり前)
- 普段は JetBrains DataGrip を使っているので、 DataGrip からローカルホストの MySQL に接続しようとすると「タイムゾーンがおかしい」といって接続できない
やったことの備忘録
大きくわけて二つ。
- タイムゾーン設定のインポート
- 起動時に参照されるタイムゾーン設定の作成
1. タイムゾーン設定のインポート
「そう言えば、タイムゾーンって my.cnf
とかに書くやつじゃなかったっけ?」というわけで、そのあたりをググってみたところ、
Windowsの場合はOSにタイムゾーンの設定が無いため、タイムゾーンのファイルをダウンロードする必要があります。
などという記述を発見。
「ええ?そうなん?」と思いつつも、公式の MySQL :: Time zone description tables から、 MySQL 5.7以上むけの POSIX 標準 SQL ファイルをダウンロードして実行。
これでタイムゾーンの管理情報は作成できたので、起動してみるがダメ。
2. 起動時に参照されるタイムゾーン設定の作成
ここでどんなタイムゾーン設定が有効になっているのかを調べてみる。
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.01 sec)
これはどういうことなのか? と再度調べてみたところ、
変数名 | 説明 |
---|---|
system_time_zone |
システムのタイムゾーンで、起動時に TZ環境変数を参照して決定したあとは、変更されることはない |
time_zone |
サーバのカレントタイムゾーンで、権限があれば後から変更できる。 初期値は SYSTEMで、 system_time_zoneと同じであることを表す |
....とのことのようだ。(出展 : http://download.nust.na/pub6/mysql/doc/refman/5.1/ja/time-zone-support.html)
なるほど、 my.cnf
を編集しなくても環境変数定義で大丈夫なのか。ということで、オフセット値を設定してみることに。
管理者権限のあるDOS窓を起動して、以下を投入。 MySQL はサービス稼働なので、システム環境変数として登録した。
> setx /m TZ +09:00
この状態で MySQL を再起動して、再びタイムゾーン設定を見てみると、
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | +09 |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.01 sec)
....ということで、無事タイムゾーンが日本に設定されたようだ。
この状態で、再び GataGrip から接続を試みると、無事接続できた。
最近のコメント