사용자 지정 시작 시간을 사용하여 Amazon RDS for MySQL DB 인스턴스를 마이그레이션하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Relational Database Service(Amazon RDS) for MySQL DB 인스턴스를 사용자 지정 시작 시간을 사용하여 다른 MySQL DB 인스턴스로 마이그레이션하려고 합니다. 어떻게 해야 합니까?

간략한 설명

Amazon RDS for MySQL에서 다른 MySQL DB 인스턴스로 데이터를 마이그레이션하려면 다음 방법 중 하나를 사용할 수 있습니다.

  • binlog 기반 복제
    참고: MySQL 버전 8.0.17 버전을 사용하는 경우 충돌 복구 중에 엔진이 마지막 binlog 파일 위치 및 파일 이름을 인쇄하지 못할 수 있습니다. 따라서 binlog 복제 방식을 사용하여 데이터를 마이그레이션할 수 없습니다. MySQL 웹 사이트에서 이 알려진 문제를 확인하세요.
  • AWS DMS

해결 방법

binlog 복제

사전 조건:

  • binlog 복제는 소스에서 생성된 binlog 파일을 사용하여 진행 중인 변경 사항을 기록합니다. binlog_format 파라미터를 원하는 이진 로깅 형식(ROW, STATEMENT 또는 MIXED)으로 설정합니다.
  • binlog 보존 시간 파라미터를 현재 값보다 큰 값으로 늘립니다. 이렇게 하면 아직 배송되지 않은 이진 로그는 소스 Amazon RDS for MySQL 인스턴스에 남아 있습니다.
  • 대상 호스트에서 Amazon RDS for MySQL 인스턴스에 연결할 수 있는지 확인합니다.

binlog 복제를 사용하여 Amazon RDS for MySQL에서 다른 MySQL DB 인스턴스로 데이터를 마이그레이션하려면 다음을 수행합니다.

1.    사용자 지정 시작(또는 특정 시점 값)으로 소스 Amazon RDS DB 인스턴스에서 특정 시점으로 복원을 수행합니다.

2.    특정 시점으로 복원 RDS 인스턴스의 백업을 만듭니다.

예를 들어 mysqldump를 사용하여 다음 작업을 수행할 수 있습니다.

mysqldump -h rdsendpoint -u username -p dbname > backupfile.sql

3.    특정 시점으로 복원 RDS 인스턴스의 오류 로그 파일을 확인하고 마지막으로 적용된 binlog 파일 및 위치와 관련된 메시지를 기록합니다. 

다음은 로그 파일 메시지의 예입니다.

[Note] InnoDB: Last MySQL binlog file position 0 456, file name mysql-bin-changelog.152707

참고: 복제를 위해 레코드 binlog 파일과 그 이후의 binlog 파일에 액세스해야 합니다. 소스 RDS 인스턴스에서의 복제는 이러한 파일을 사용해서만 수행할 수 있습니다. RDS MySQL의 최대 binlog 보존 기간은 7일로만 설정할 수 있으며 기본값은 ‘NULL’입니다. (자세한 내용은 mysql.rds_set_configuration을 참조하세요.) 따라서 이후 단계에서 완료할 수 있도록 이러한 binlog 파일을 소스 인스턴스에 보관합니다.

4.    복제 사용자를 설정하고 소스 Amazon RDS for MySQL 인스턴스에서 사용자에게 필요한 권한을 부여합니다.

mysql> create user repl_user@'%' identified by 'repl_user';
mysql> grant replication slave, replication client on *.* to repl_user@'%';
mysql> show grants for repl_user@'%';

5.    MySQL-target에 로그인하여 백업 파일을 대상 온프레미스 서버로 전송합니다. 새 데이터베이스를 생성하고 dumpfile을 사용하여 데이터베이스를 새 외부 DB 인스턴스로 복원합니다.

$ mysql -h hostname -u username -p dbname < backupfile.sql

6.    대상 MySQL 엔진을 중지합니다.

$ service mysqld stop
  1. 고유한 서버 ID와 복제하려는 데이터베이스를 가리키도록 my.cnf 파일 파라미터를 수정합니다.

예를 들어 다음과 같습니다.

server_id=2
replicate-do-db=testdb

여러 데이터베이스를 복제하는 경우 replicate-do-db 옵션을 여러 번 사용하고 이러한 데이터베이스를 다음과 같이 별도의 줄에 지정할 수 있습니다.

replicate-do-db=<db_name_1>
replicate-do-db=<db_name_2>
replicate-do-db=<db_name_N>

데이터베이스 이름을 사용하여 복제 필터를 만드는 방법에 대한 자세한 내용은 MySQL 웹 사이트의 replicate-do-db를 참조하세요.

8.    파일을 저장하고 대상 MySQL DB 인스턴스에서 MySQL DB 엔진을 다시 시작합니다.

예를 들어 Linux 시스템을 사용하는 경우 다음 구문을 사용할 수 있습니다.

service mysqld restart

9.    소스 RDS for MySQL DB 인스턴스에 대한 연결을 설정합니다.

예를 들어 다음과 같습니다.

mysql> change master to master_host='rds-endpoint',master_user='repl_user', master_password='password', master_log_file='mysql-bin.152707', master_log_pos= 456;

master_host: 소스 Amazon RDS for MySQL 인스턴스의 엔드포인트입니다.
master_user: 복제 사용자의 이름입니다(4단계에서 생성됨).
master_password: 복제 사용자의 암호입니다.
master_log_file: 3단계에서 기록한 binlog 파일 이름입니다. (3단계에서 예제 출력은 ‘mysql-bin-changelog.152707’을 binlog 로그 파일 이름으로 표시했습니다.)
master_log_pos: 3단계에서 기록된 binlog 위치입니다. (3단계에서 예제 출력은 ‘456’을 binlog 파일 위치로 표시했습니다.)

  1.     대상 RDS for MySQL DB 인스턴스에 로그인하고 다음 명령으로 복제를 시작합니다.
mysql> start slave;

11.  복제가 소스 RDS for MySQL DB 인스턴스와 대상 MySQL DB 인스턴스 간에 동기화 중인지 확인합니다.

mysql> show slave status\G

AWS DMS

AWS Database Migration Service(AWS DMS)를 사용하여 복제를 설정하기 전에 다음 리소스를 확인합니다.

  • 특정 시점으로 복원된 인스턴스에서 백업을 수행하려면 Binlog 복제 섹션의 1~5단계를 참조하세요. 사용자 지정 시작 시간은 백업 보존 기간 내의 어느 (과거) 시점이든 가능하므로 이러한 단계를 따르는 것이 가장 좋습니다. 대상 DB 인스턴스에서 백업을 복원한 후 DB 복구 프로세스 중에 생성된 체크포인트 로그 시퀀스 번호(LSN)를 기록합니다. 변경 데이터 캡처(CDC) 시작 시간을 설정하려면 LSN을 참조해야 합니다. 체크포인트 LSN을 가져오려면 특정 시점으로 복원 작업이 완료된 직후 복원된 RDS MySQL 인스턴스의 오류 로그 파일을 검토합니다. 예를 들어 다음과 같습니다.
[Note] InnoDB: Log scan progressed past the checkpoint lsn 44326835524