좌충우돌 MySQL RDS dump/load 하기
현재 우리 회사에서는 AWS RDS를 사용하는데, prd, dev로 두개의 데이터베이스를 같이 운용하고 있다.
데이터베이스가 따로 사용되고 있다보니 몇가지 문제점이 있었는데, 그 중 두 데이터베이스의 데이터가 많이 달라졌을 경우 dev에서 잡히지 않는 버그, 에러가 prd 에서 잡히는 경우가 있었다는 것이다.
기존에 이런 경우에는 EC2 서버 인스턴스에서 같이 돌리던 MySQL에서 데이터베이스를 뜯어와서, 로컬 호스트 mysql에 붙이는 식으로 작업했었다.
RDS에서도 크게 다르지는 않지만 몇가지 신경써주지 않으면 에러가 날 확률이 높기 때문에 글로 정리를 해본다.
Dump
mysqldump -u <USER> -p -h <RDS_URL> -v <DATABASE> > <FILENAME>.sql
dump 자체는 간단하게 이루어 진다.
Load
mysql -u <USER> -p -h <RDS_URL> <DATABASE> < <FILENAME>.sql
위와 같이 옮겨주고 싶은 데이터베이스에 dump 해둔 sql 파일을 넣어주면 된다.
ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation
하지만 RDS 에서 dump해온 sql 파일을 load 하려고 하면 위와 같은 에러가 발생할 수 있다.
이는 RDS가 제공하는 MySQL 서버가, 사용자가 아닌 다른 DEFINER
가 지정된 sql 파일을 허용하지 않기 때문이라고 한다.
이를 해결하기 위해서 Unix의 sed 커맨드를 활용해서 일괄적으로 DEFINER
가 명시된 부분을 지워준다.
(mac linux 커맨드가 살짝 다르다)
LINUX
sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i <FILENAME>.sql
MAC
sed -i '' 's/\sDEFINER=`[^`]*`@`[^`]*`//g' <FILENAME>.sql
변경된 sql 파일을 다시 load 해본다.
위와 같이 DEFINER
를 다 지워주고 시도하면 환경에 따라 바로 해결될 수도 있지만, 또 다른 에러가 발생할 수 있다.
아래의 친구들이 문제인데, DEFINER
를 모두 삭제하는 경우 충돌하는 것 같다.
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
위의 코드들을
-- SET @@SESSION.SQL_LOG_BIN= 0;
-- SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
-- SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
이렇게 주석처리해준다.
애초에 dump할 때
--set-gtid-purged=OFF
옵션을 붙이면 해결된다는 이야기도 있었지만 나의 경우에는 해결되지 않았다.
추가
아래의 링크를 보고, RDS 파라미터 log_bin_trust_function_creators
도 변경해주었지만 효과가 있지는 않았었다.
혹시 위의 방법을 모두 시도해도 해결이 되지 않는다면, 참고해보시길.
https://aws.amazon.com/ko/premiumsupport/knowledge-center/error-1227-mysqldump/
Ref
https://aws.amazon.com/ko/premiumsupport/knowledge-center/error-1227-mysqldump/
http://blog.naver.com/PostView.nhn?blogId=kkson50&logNo=221908346699&categoryNo=9&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=search
https://stackoverflow.com/questions/44015692/access-denied-you-need-at-least-one-of-the-super-privileges-for-this-operat
Author And Source
이 문제에 관하여(좌충우돌 MySQL RDS dump/load 하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@neulhan/좌충우돌-MySQL-RDS-dumpload-하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)