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