로걸 MariaDB -> RDS MariaDB Migration

  1. 로걸 MariaDB -> RDS for MariaDB 방화벽 설정

mysqldump를 하기 위해서 먼저 해당 방화벽을 열어준다.
EC2 -> RDS로의 Migration을 위해서는 EC2의 보안그룹을 RDS인스턴스 방화벽 인바운드 규칙에 추가한다.

  1. mysqldump를 통해 받은 백업본으로 복원한다.
[ec2-user@ip-172-31-6-25 ~]$ mysql -hrds-mariadb.cmudchjaqwjb.ap-northeast-2.rds.amazonaws.com -uadmin -p < alldb_backup.sql

하지만 계속 권한 부족 에러가 떳다

ERROR 1044 (42000) at line 366: Access denied for user 'admin'@'%' to database 'mysql'

참고:
https://stackoverflow.com/questions/44015692/access-denied-you-need-at-least-one-of-the-super-privileges-for-this-operat

해결방법

  1. mysqldump로 백업파일을 생성하면
    DEFINER=.. 함수가 사용되는데,
    소스를 확인 결과 CREATE DEFINER=root@% FUNCTION ... 형식으로 DEFINER를 'root'@'%'로 지정해 놓고 있다. 기본적으로 함수를 생성할 때에 DEFINER를 지정하지 않고 CREATE FUNCTION ...으로 생성하면 명령어를 친 유저 소유로 생성이 된다. 하지만 다른 유저 소유로 생성이 될 수 있게 하는 명령어 구문이 DEFINER=유저명 명령어이다.

따라서 root권한이 없는 rds admin계정으로써는 저 구문을 수행할 수 없는 것이다.
rds에서 privilege . 권한을 부여하려고 했지만 해당 권한을 부여할 수 없었다.
-> RDS 에서는 Super 권한 부여를 할 수 없다.

따라서 dump파일안에 있는 해당 구문을 삭제해야한다.

sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i oldfile.sql
  1. 또는 mysqldump 파일안에 해당 구문이 있으면 에러가 발생한다
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

따라서 저 구문을 주석처리하거나 아니면 mysqldump를 받을 때 저 문구가 생성되지 않도록 옵션을 지정해 주어야 한다.

mysqldump --set-gtid-purged=OFF

--> 해당구문은 MariaDB에는 사용할수 없는 옵션이다
https://stackoverflow.com/questions/48876519/mysqldump-stopped-working-with-conversion-to-mariadb-set-gtid-purged-off-issue

  1. log_bin_trust_function_creators = 1; 설정을 해주면 된다.
    하지만 RDS 기본 파라미터그룹은 수정할 수 없기때문에 따로 파라미터그룹을 만들어서 해당 값을 수정 후 RDS에 적용해야 한다
1.Open the RDS web console.
2.Open the “Parameter Groups” tab.
3.Create a new Parameter Group. On the dialog, select the MySQL family compatible 4.to your MySQL database version, give it a name and confirm. Select the just 5.created Parameter Group and issue “Edit Parameters”.
6.Look for the parameter ‘log_bin_trust_function_creators’ and set its value to ’1′.
7.Save the changes.
8.Open the “Instances” tab. Expand your MySQL instance and issue the “Instance Action” named “Modify”.
9.Select the just created Parameter Group and enable “Apply Immediately”.
Click on “Continue” and confirm the changes.
10.Wait for the "Modifying" operation to be completed.
11. Again, open the “Instances” tab. Expand your MySQL instance and expand “Instance Action” tab and select "Reboot".

조치가 끝난 후 restore를 진행한다.

mysql -f -hrds-mariadb.cmudchjaqwjb.ap-northeast-2.rds.amazonaws.com -uadmin -p < alldb_backup.sql

-f옵션은 에러가 출력하고, 해당 에러를 무시하고 계속 복원을 진행하는 옵션

복원이 완료된 후 정상적으로 복원 되었는지 확인

 mysql -hrds-mariadb.cmudchjaqwjb.ap-northeast-2.rds.amazonaws.com -uadmin -p

좋은 웹페이지 즐겨찾기