AWS RDS MySQL을 사용하는 중 ERROR 2006 (HY000): MySQL server has gone away 라는 에러메시지와 함께 쿼리가 실행되지 않는 현상

이리저리 검색을 해 보니 버퍼가 모자라 실행이 안된다는 내용이 많았는데
버퍼 사이즈를 늘려줘도 동일한 현상이 발생했다

wasuser@fb:~ % mysql -h ****.ap-northeast-1.rds.amazonaws.com -P port --max_allowed_packet=2073741824 -u username -p dbname
mysql> show variables like 'char%';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2373
Current database: adcinf

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2374
Current database: adcinf

ERROR 2006 (HY000): MySQL server has gone away
mysql> quit

AWS RDS MySQL의 경우 세션 시작 시 타임존을 변경하도록 하고 있는데 이녀석이 문제였던 것
(http://gyus.me/?p=446 참고)
새로 만든 사용자에게 권한을 안준 것이다

wasuser@fb:~ % mysql -h ****.ap-northeast-1.rds.amazonaws.com -P port -u adminuser -p mysql
mysql> GRANT EXECUTE ON PROCEDURE MYSQL.STORE_TIME_ZONE TO 'username'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> quit

이제 다시 접속 해 보면 정상 작동되는 것을 확인할 수 있다

wasuser@fb:~ % mysql -h ****.ap-northeast-1.rds.amazonaws.com -P port -u username -p dbname
mysql> show variables like '%coll%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | utf8_unicode_ci   |
| collation_server     | utf8_unicode_ci   |
+----------------------+-------------------+
3 rows in set (0.01 sec)

mysql> quit

 

*참고*

타임존 설정 시 타임존 뿐만아니라 해당 세션의 캐릭터셋도 같이 설정 해
클라이언트에서도 한글 사용이 용이하게 설정해줄 수 있다
DB User에게 다시 실행권한을 주는것을 잊지 말도록!!!

wasuser@fb:~ % mysql -h ****.ap-northeast-1.rds.amazonaws.com -P port -u adminuser -p mysql
mysql> DROP PROCEDURE IF EXISTS mysql.store_time_zone;
mysql> DELIMITER |
mysql> CREATE PROCEDURE mysql.store_time_zone()
    ->     IF NOT (POSITION('rdsadmin@' IN CURRENT_USER()) = 1) THEN
    ->         SET SESSION time_zone = 'Asia/Seoul';
    ->         SET character_set_client = utf8;
    ->         SET character_set_results = utf8;
    ->         SET character_set_connection = utf8;
    ->     END IF |
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT EXECUTE ON PROCEDURE MYSQL.STORE_TIME_ZONE TO 'username'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> quit
Posted by crane76
,