2014年8月19日火曜日

RDSでTimezoneを変更するストアドを入れているとMySQL has gone awayされる件

いろいろなサイトを調べた結果、結構な人が困っている様子。

UTCのママ使って、プログラム側で毎回設定してもいいけれど、今までの別の
システムで動かしていた物を移設となると、なるべく既存の物に手を入れたくないのが人情

サポートに問い合わせつつ、解決の目を見たので、備忘録兼ねて
----------------------------------------------------------------------------



状況を再現させる
0,)ふつうにRDSのインスタンスを作る
どんなスペックでもかまわないです。
TimezoneがUTC固定のため、日本時間-9:00になっている

1,)Timezoneを変更するストアドを作る
-- 格納するデータベースをさくせい
mysql> CREATE DATABASE shared;

-- すとあど
mysql> DELIMITER |
CREATE PROCEDURE shared.`store_time_zone`()
IF NOT (POSITION('rdsadmin@' IN CURRENT_USER()) = 1) THEN
  SET SESSION time_zone = 'Asia/Tokyo';
END IF |
Query OK, 0 rows affected (0.01 sec)

-- 適用
mysql> DELIMITER ;

-- 確認
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2014-08-19 08:25:59 |
+---------------------+
1 row in set (0.02 sec)

-- 読んでみる
mysql> CALL shared.store_time_zone;
Query OK, 0 rows affected (0.10 sec)

-- 日本時間で表示されていることを確認
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2014-08-19 17:26:08 |
+---------------------+
1 row in set (0.02 sec)

-- 参考サイト様
http://dev.classmethod.jp/cloud/aws/change-timezone-on-amazon-rds-mysql/

2,)ユーザーを作ってみる
GRANT ALL PRIVILEGES ON `%`.* TO 'testuser'@'%' IDENTIFIED BY 'testuser' WITH GRANT OPTION;

3,)再現チェック
$ mysql -utestuser -p -h <RDS_Endpoint>
mysql> show databases;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    1195762
Current database: *** NONE ***
ERROR 1184 (08S01): Aborted connection 1195762 to db: 'unconnected' user: 'testuser' host: '111.222.111.222' (init_connect command failed)

4,)EXECUTE権限をユーザに付与
RDS構築時の管理ユーザでmysqlへログイン
mysql> grant execute on *.* to 'testuser'@'%';

5,)変更かくにん
mysql> SELECT * FROM mysql.user\G
====================
Execute_priv: Y
====================

6,)動作確認
$ mysql -utestuser -p -h <RDS_Endpoint>
mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| information_schema     |
| innodb                 |
| testdb                 |
| mysql                  |
| performance_schema     |
| shared                 |
| tmp                    |
+------------------------+
19 rows in set (0.00 sec)

-----------------
なおった!

0 件のコメント:

コメントを投稿