mysqldump 사용
mysqldump -h database-1.xxxxxxx.us-east-2.rds.amazonaws.com -uadmin -p --single-transaction --databases db1 db2 db3 > backups/dump.sql
- mysql 데이터베이스에 dump파일 넣기
$ mysql --show-warnings < backups/dump.sql
그런 다음 AWS RDS 복제본에서 SHOW SLAVE STATUSG를 실행 하고 온프레미스 서버에 복제하는 AWS RDS 마스터에 연결할 때 사용할 Master_Log_File 및 Exec_Master_Log_Pos를 기록해 둡니다 . CHANGE MASTER TO… MASTER_LOG_FILE=Master_Log_File, MASTER_LOG_POS=를 실행할 때 해당 좌표를 사용합니다.. 물론 백업이 완료되면 RDS 복제본을 시작하여 복제 스레드를 다시 시작하는 것을 잊지 마십시오.
rds-replica-mysql> CALL mysql.rds_start_replication;
mydumper 사용하기
mydumper는 특히 데이터 세트가 매우 큰 경우 대안이 될 수 있습니다. 소스 RDS 노드에서 데이터 세트의 덤프 또는 백업 사본을 가져올 때 병렬성과 속도를 제공하기 때문입니다. mydumper를 설치하는 것부터 대상 온프레미스 서버에 로드하는 것까지 아래 단계를 따르세요.
바이너리를 설치합니다. 바이너리는 여기 https://github.com/maxbube/mydumper/releases 에서 찾을 수 있습니다 .
$ yum install https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper-0.9.5-2.el6.x86_64.rpm
RDS 소스 노드에서 백업을 가져옵니다. 예를 들어,
[root@testnode26 mydumper-2]# /usr/bin/mydumper --outputdir=. --verbose=3 --host=database-1.xxxxxxx.us-east-2.rds.amazonaws.com --port=3306 --kill-long-queries --chunk-filesize=5120 --build-empty-files --events --routines --triggers --compress --less-locking --success-on-1146 --regex='(db1.|db2.|db3.|mydb4.|testdb5.)' -u admin --password=admin123
** Message: Connected to a MySQL server
** (mydumper:18904): CRITICAL **: Couldn't acquire global lock, snapshots will not be consistent: Access denied for user 'admin'@'%' (using password: YES)
** Message: Started dump at: 2020-10-18 09:34:08
** Message: Written master status
** Message: Multisource slave detected.
** Message: Thread 5 connected using MySQL connection ID 1109
이제 이 시점에서 mydumper는 *.gz 파일 형식의 백업 파일을 가져옵니다.
온프레미스 서버에 대상을 로드합니다.
$ myloader --host localhost --directory=$(pwd) --queries-per-transaction=10000 --threads=8 --compress-protocol --verbose=3
** Message: 8 threads created
** Message: Creating database `db1`
** Message: Creating table `db1`.`folders_rel`
** Message: Creating table `db2`.`p`
** Message: Creating table `db2`.`t1`
** Message: Creating table `db3`.`AddressCodeTest`
대상 노드를 슬레이브/복제본으로 설정합니다. mydumper에는 GTID 위치를 포함한 바이너리 로그 좌표로 구성된 metadata라는 파일이 포함됩니다. 예:
$ cat metadata
Started dump at: 2020-10-18 10:23:35
SHOW MASTER STATUS:
Log: mysql-bin-changelog.000680
Pos: 676
GTID:0-1675507089-3044
그런 다음 복제본 또는 대상 MySQL/MariaDB 데이터베이스 노드에서 변경 마스터를 실행합니다.
MariaDB [jbmrcd_date]> CHANGE MASTER TO MASTER_HOST='database-1.ksdjfklw.us-east-2.rds.amazonaws.com', MASTER_USER='repl_user', MASTER_PASSWORD='repl_passw0rd', MASTER_LOG_FILE='mysql-bin-changelog.000680', MASTER_LOG_POS
=676;
Query OK, 0 rows affected (0.002 sec)
슬레이브를 시작합니다
MariaDB [jbmrcd_date]> start slave;
Query OK, 0 rows affected (0.001 sec)
이 시점에서 MySQL/MariaDB를 실행하는 Amazon RDS 인스턴스에서 복제되었습니다. 애플리케이션이 Amazon RDS 인스턴스에서 이동할 준비가 되면 온프레미스 서버로 가는 엔드포인트를 설정하면 RDS 인스턴스의 모든 나머지 트랜잭션이 온프레미스로 복제되어 온프레미스 서버로 가는 데이터가 누락되지 않습니다.
출처 : https://severalnines.com/blog/migrating-amazon-rds-mysql-or-mariadb-to-on-prem-server/