MySQL Dump 명령어를 사용하여 RDS 기존 데이터를 다른 RDS로 이관 (+Blob 데이터 issue)

백종현·2023년 4월 27일
0
post-custom-banner

MySQL RDS로 데이터를 이관하기

일단 mysqldump.exe를 활용하여 dump파일, sql 파일을 뽑아내어 이를 INSERT하려고 하였다.

오류 상황 1

mysql.exe --protocol=tcp --host=XXX --user=userName --port=3306 --default-character-set=utf8 --comments < "import 하고자 하는 SQL Query"

ERROR 1227 (42000) at line 20: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation
  1. RDS가 제공하는 MySQL 서버가, 사용자가 아닌 다른 DEFINER가 지정된 sql 파일을 허용하지 않기 때문이라고 한다. 따라서 linux의 sed 's/\sDEFINER=[^`]@[^`]//g' -i <FILENAME>.sql 명령어를 사용하여 DEFINER 가 명시된 부분을 삭제
  2. RDS 에서 허용하지 않는 옵션들이 있다고 한다. 이를 SQL 파일에서 주석처리한다.
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;

오류 상황 2

But 위의 방식을 사용하니 Datatype이 Point였던 Blob 데이터가 utf-8로 들어가게 되면서, IMPORT 시에 아래와 같은 오류가 발생

ERROR 1416 (22003) at line 51: Cannot get geometry object from data you send to the GEOMETRY field

따라서 --hex-blob=TRUE 을 사용하여 Blob 데이터를 16진수로 뽑아냄

mysqldump.exe --host=XXX --port=3306 --default-character-set=utf8 --user=admin --protocol=tcp --column-statistics=FALSE --hex-blob=TRUE “schema_name" "table_name"

참조

profile
노력하는 사람
post-custom-banner

0개의 댓글