MariaDB (MySQL) のタイムゾーン、タイムゾーンテーブルを設定する

MariaDB (MySQL) のタイムゾーン、タイムゾーンテーブルを設定する手順を紹介します。

Windowsの場合

タイムゾーンファイルのダウンロード

Windowsの場合はOSにタイムゾーンの設定が無いため、タイムゾーンのファイルをダウンロードする必要があります。
https://dev.mysql.com/downloads/timezones.htmlのページにアクセスします。下図の画面が表示されますので、timezoneのposixファイルをダウンロードします。今回は、最新のMariaDBを利用していますので、"timezone_2017b_posix_sql.zip" ファイルをダウンロードします。




zipファイルを展開します。timezone_posix.sql ファイルが展開されます。

timezone_posix.sql ファイルの実行

ダウンロードした timezone_posix.sql を実行します。MySQLのコマンドプロンプトから下記のコマンドを実行します。
  mysql --user=root --password mysql < c:\timezone_posix.sql
コマンドを実行します。


パスワードの入力プロンプトが表示されます。MariaDBのrootのパスワードを入力します。


コマンドが正常に実行できると、特にメッセージは表示されず、コマンド入力待ち状態になります。

my.iniファイルの変更

my.iniファイルを変更します。
my.ini 変更前
[mysqld]
datadir=C:/Program Files/MariaDB 10.2/data
port=3306
innodb_buffer_pool_size=255M
character-set-server=utf8

[client]
port=3306
plugin-dir=C:/Program Files/MariaDB 10.2/lib/plugin
my.ini 変更後
default-time-zone='Asia/Tokyo' の行を追加します。
[mysqld]
datadir=C:/Program Files/MariaDB 10.2/data
port=3306
innodb_buffer_pool_size=255M
character-set-server=utf8
default-time-zone='Asia/Tokyo'

[client]
port=3306
plugin-dir=C:/Program Files/MariaDB 10.2/lib/plugin



timezone_posix.sql のコマンド実行をしない状態で、default-time-zone='Asia/Tokyo' をmy.iniに追記すると、MariaDBの起動時にエラーになり起動できません。my.iniへのdefault-time-zone='Asia/Tokyo' の追記は、timezone_posix.sql のコマンド実行後に実施します。

MariaDBの再起動

MariaDBを再起動します。管理ツールの[サービス]を起動します、下図のウィンドウが表示されます。サービスの一覧から"MySQL"の項目をクリックして選択します。


右クリックしてポップアップメニューを表示します。メニューの中の[再起動]をクリックします。


MySQLのサービスが再起動されます。

time_zone 値の確認

SQLのプロンプトから下記のコマンドを実行します。
  show variables like '%time_zone%';


下記の結果が返ります。
+------------------+---------------+
| Variable_name    | Value         |
+------------------+---------------+
| system_time_zone | ???? (?W????) |
| time_zone        | Asia/Tokyo    |
+------------------+---------------+
2 rows in set (0.01 sec)
time_zone の値が "Asia/Tokyo" に設定されていればOKです。


参考:cactiuser アカウントに対するアクセス権の設定

Cactiを利用している場合は、cactiuser のアカウントが TimeZoneテーブルにアクセスできるよう下記のコマンドを実行します。
  grant select on mysql.time_zone_name to 'cactiuser'@'localhost'
    identified by '(cactiuser のパスワード)';



Linuxの場合

タイムゾーンテーブルの設定

Linuxの場合はタイムゾーンの設定がOSにインストールされているため、下記のコマンドを実行すればタイムゾーンの設定をデータベースに入力できます。
ターミナルコンソールから下記のコマンドを実行します。
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

my.cnf ファイルの変更

/etc/my.cnf ファイル、または、 /etc/my.cnf.d/ ディレクトリ内のcnfファイルを編集します。
cnfファイル内の mysqld セクションに "default-time-zone" を記述します。
MariaDBのバージョン10.2の場合は、/etc/my.cnf.d/server.cnf ファイルの[mysqld]セクションに記述するのが良いかもしれません。

cnf ファイルへの追記

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

MariaDBの再起動

root権限で
systemctl restart mysql
コマンドを実行し、MariaDBを再起動します。

time_zone 値の確認

下記のコマンドを実行して、MySQLのSQLプロンプトを表示します。
mysql -u root -p



パスワード入力プロンプトが表示されますので、データベース(MariaDB)のrootのパスワードを入力します。


SQLのコマンドプロンプトが表示されます。


MySQLのプロンプトから下記のコマンドを実行します。
  show variables like '%time_zone%';


下記の結果が返ります。
+------------------+---------------+
| Variable_name    | Value         |
+------------------+---------------+
| system_time_zone | JST           |
| time_zone        | Asia/Tokyo    |
+------------------+---------------+
2 rows in set (0.01 sec)
time_zone の値が "Asia/Tokyo" に設定されていればOKです。


参考:cactiuser アカウントに対するアクセス権の設定

Cactiを利用している場合は、cactiuser のアカウントが TimeZoneテーブルにアクセスできるよう下記のコマンドを実行します。
  grant select on mysql.time_zone_name to 'cactiuser'@'localhost'
    identified by '(cactiuser のパスワード)';
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
掲載日: 2017-07-24
iPentec all rights reserverd.