{Aurora}Aurora と MySQL との間、または Aurora と別の Aurora DB クラスターとの間のレプリケーション (バイナリログレプリケーション)

(1)Aurora --> RDS MySQL
レプリケーションソース: 5.7.mysql_aurora.2.10.0
レプリカターゲット: MySQL 5.7.34

--0. レプリカターゲット作成

aws rds create-db-instance \
--db-instance-identifier mysql01 \
--allocated-storage 20 \
--db-instance-class db.t3.micro \
--engine mysql \
--master-username root \
--master-user-password 'password' \
--no-multi-az \
--engine-version 5.7.34 \
--storage-type gp2 \
--no-publicly-accessible


-- 1.レプリケーションソースのバイナリログ記録を有効にする
aws rds create-db-cluster-parameter-group \
--db-parameter-group-family aurora-mysql5.7 \
--db-cluster-parameter-group-name cpg01 \
--description cpg01

aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name cpg01 \
--parameters ParameterName=binlog_format,ParameterValue=MIXED,ApplyMethod=pending-reboot

aws rds create-db-cluster \
--db-cluster-identifier cluster11 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.10.0 \
--master-username root \
--master-user-password 'password' \
--db-cluster-parameter-group-name cpg01

aws rds create-db-instance \
--db-instance-identifier cluster11-instance01 \
--db-cluster-identifier cluster11 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade


-- 2.レプリケーションソースのバイナリログを不要になるまで保持する
CALL mysql.rds_set_configuration('binlog retention hours', 24);


-- 3.レプリケーションソースのスナップショットを作成する

mysqldump --databases test --single-transaction --order-by-primary -r backup.sql -u root -h cluster11.cluster-xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p

※"--master-data=2"を指定すると下記エラーとなる
mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'root'@'%' (using password: YES) (1045)

DB クラスターのスナップショットを作成→復元することでイベントからbinlog ファイルの名前と場所を確認する必要がある

aws rds create-db-cluster-snapshot \
--db-cluster-snapshot-identifier snap01 \
--db-cluster-identifier cluster11

aws rds restore-db-cluster-from-snapshot \
--db-cluster-identifier dummy01 \
--snapshot-identifier snap01 \
--engine aurora-mysql \
--db-cluster-parameter-group-name cpg01

aws rds create-db-instance \
--db-instance-identifier dummy01-instance01 \
--db-cluster-identifier dummy01 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade

aws rds describe-events


aws rds delete-db-instance \
--db-instance-identifier dummy01-instance01 \
--skip-final-snapshot

aws rds delete-db-cluster \
--db-cluster-identifier dummy01 \
--skip-final-snapshot

aws rds delete-db-cluster-snapshot \
--db-cluster-snapshot-identifier snap01


-- 4.レプリカターゲットにスナップショットをロードする
mysql -h mysql01.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -P 3306 -u root -p
source backup.sql;

-- 5.レプリカターゲットでレプリケーションを有効にする

host mysql01.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com

-- レプリケーションソースでの作業

CREATE USER 'repl_user'@'172.31.555.555' IDENTIFIED BY 'password';
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'172.31.555.555';

-- レプリカターゲットでの作業
CALL mysql.rds_set_external_master ('cluster11-instance01.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000003', 123, 0);
CALL mysql.rds_start_replication;


-- 6.レプリカをモニタリングする

SHOW SLAVE STATUS\G


-- 7.レプリカターゲットでバイナリログのレプリケーションを停止する
CALL mysql.rds_stop_replication;

-- 8.レプリケーションソースのバイナリログ記録を無効にする
aws rds modify-db-cluster \
--db-cluster-identifier cluster11 \
--db-cluster-parameter-group-name default.aurora-mysql5.7

aws rds stop-db-cluster --db-cluster-identifier cluster11

aws rds start-db-cluster --db-cluster-identifier cluster11


CALL mysql.rds_set_configuration('binlog retention hours', NULL);

 


(2)Aurora --> 外部 MySQL
レプリケーションソース: 5.7.mysql_aurora.2.10.0
レプリカターゲット: MySQL 5.7.35

--0. レプリカターゲット作成

sudo yum remove mysql
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community

sudo yum info mysql-community-server

sudo yum -y install mysql-community-server

sudo mysqld --version

sudo systemctl enable mysqld.service
sudo systemctl restart mysqld.service
sudo systemctl status mysqld.service

sudo cat /var/log/mysqld.log | grep password

sudo mysql_secure_installation


-- 初期設定

sudo vim /etc/my.cnf
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
character_set_server=utf8mb4

 

-- 1.レプリケーションソースのバイナリログ記録を有効にする
aws rds create-db-cluster-parameter-group \
--db-parameter-group-family aurora-mysql5.7 \
--db-cluster-parameter-group-name cpg01 \
--description cpg01

aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name cpg01 \
--parameters ParameterName=binlog_format,ParameterValue=MIXED,ApplyMethod=pending-reboot

aws rds create-db-cluster \
--db-cluster-identifier cluster11 \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.10.0 \
--master-username root \
--master-user-password 'password' \
--db-cluster-parameter-group-name cpg01

aws rds create-db-instance \
--db-instance-identifier cluster11-instance01 \
--db-cluster-identifier cluster11 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade

-- 2.レプリケーションソースのバイナリログを不要になるまで保持する
CALL mysql.rds_set_configuration('binlog retention hours', 24);

-- 3.レプリケーションソースのスナップショットを作成する

mysqldump --databases test --single-transaction --order-by-primary -r backup.sql -u root -h cluster11.cluster-xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p

※"--master-data=2"を指定すると下記エラーとなる
mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'root'@'%' (using password: YES) (1045)

DB クラスターのスナップショットを作成→復元することでイベントからbinlog ファイルの名前と場所を確認する必要がある

aws rds create-db-cluster-snapshot \
--db-cluster-snapshot-identifier snap01 \
--db-cluster-identifier cluster11

aws rds restore-db-cluster-from-snapshot \
--db-cluster-identifier dummy01 \
--snapshot-identifier snap01 \
--engine aurora-mysql \
--db-cluster-parameter-group-name cpg01

aws rds create-db-instance \
--db-instance-identifier dummy01-instance01 \
--db-cluster-identifier dummy01 \
--db-instance-class db.t3.small \
--engine aurora-mysql \
--no-auto-minor-version-upgrade

aws rds describe-events

aws rds delete-db-instance \
--db-instance-identifier dummy01-instance01 \
--skip-final-snapshot

aws rds delete-db-cluster \
--db-cluster-identifier dummy01 \
--skip-final-snapshot

aws rds delete-db-cluster-snapshot \
--db-cluster-snapshot-identifier snap01


-- 4.レプリカターゲットにスナップショットをロードする
mysql -h localhost -P 3306 -u root -p
source backup.sql;

-- 5.レプリカターゲットでレプリケーションを有効にする

host cluster11-instance01.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com

-- レプリケーションソースでの作業
CREATE USER 'repl_user'@'172.31.444.444' IDENTIFIED BY 'password';
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'172.31.444.444';

-- レプリカターゲットでの作業
CHANGE MASTER TO MASTER_HOST = '172.31.333.333', MASTER_PORT = 3306, MASTER_USER = 'repl_user', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin-changelog.000003', MASTER_LOG_POS = 123;
START SLAVE;


-- 6.レプリカをモニタリングする

SHOW SLAVE STATUS\G


-- 7.レプリカターゲットでバイナリログのレプリケーションを停止する
STOP SLAVE;

-- 8.レプリケーションソースのバイナリログ記録を無効にする
aws rds modify-db-cluster \
--db-cluster-identifier cluster11 \
--db-cluster-parameter-group-name default.aurora-mysql5.7

aws rds stop-db-cluster --db-cluster-identifier cluster11

aws rds start-db-cluster --db-cluster-identifier cluster11


CALL mysql.rds_set_configuration('binlog retention hours', NULL);