Aurora MySQL クラスター間のレプリケーション¶
同一リージョン内で Aurora クラスターを作り直すため、MySQL 標準のレプリケーション機能を使って移行する。
参考
手順¶
-
レプリケーション元 Aurora クラスターのクラスターパラメーターで、バイナリログを有効化する。
shell DB_CLUSTER_PARAMETER_GROUP_NAME=ciaocamera-test-camdb-camdbclusterparametergroup-tsy9z9tr7841 aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name "${DB_CLUSTER_PARAMETER_GROUP_NAME}" \ --parameters "ParameterName=binlog_format,ParameterValue=MIXED,ApplyMethod=pending-reboot"
確認
shell $ aws rds describe-db-cluster-parameters \ --db-cluster-parameter-group-name "${DB_CLUSTER_PARAMETER_GROUP_NAME}" \ | jq -r '.Parameters[] | select(.ParameterName == "binlog_format") | .ParameterValue' MIXED
設定変更を反映するため、インスタンスの再起動をおこなう。
shell DB_INSTANCE_IDENTIFIER=cc1f9fpwkwcn39x aws rds reboot-db-instance --db-instance-identifier ${DB_INSTANCE_IDENTIFIER}
バイナリログのファイル名と場所を確認する。
shell $ SOURCE_DB_HOST=ciaocamera-test-camdb-camdbcluster-1ge2ln1kxr6iq.cluster-ce5bbgu32bs2.ap-northeast-1.rds.amazonaws.com $ SOURCE_DB_PORT=56306 $ SOURCE_DB_USERNAME=ciao $ SOURCE_DB_PASSWORD=cc-pw.2020 $ mysql -h "${SOURCE_DB_HOST}" -P "${SOURCE_DB_PORT}" -u "${SOURCE_DB_USERNAME}" -p"${SOURCE_DB_PASSWORD}" \ -e "SHOW MASTER STATUS;" +----------------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +----------------------------+----------+--------------+------------------+-------------------+ | mysql-bin-changelog.000026 | 120 | | | | +----------------------------+----------+--------------+------------------+-------------------+
-
レプリケーション元 Aurora クラスターのスナップショットを取得する。
-
スナップショットからクラスターを起動する。
-
レプレイケーション先 Aurora クラスターのマスターインスタンスのイベントから、
shell $ DB_IDENTIFIER=cceo0kvxb9rsjr $ aws rds describe-events --source-type db-instance --source-identifier "${DB_IDENTIFIER}" \ | jq -r '.Events[] | .Date + "\t" + .Message'
CALL mysql.rds_set_configuration('binlog retention hours', 144);
レプリカソースにレプリケーション用のユーザーを作成する。
$ REPL_USERNAME=repl
$ REPL_PASSWORD=repl-pw.2020
$ mysql -h "${SOURCE_DB_HOST}" -P "${SOURCE_DB_PORT}" -u "${SOURCE_DB_USERNAME}" -p"${SOURCE_DB_PASSWORD}" \
-e "
CREATE USER '${REPL_USERNAME}'@'10.0.0.0/255.255.255.0' IDENTIFIED BY '${REPL_PASSWORD}';
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '${REPL_USERNAME}'@'10.0.0.0/255.255.255.0';
GRANT USAGE ON *.* TO '${REPL_USERNAME}'@'10.0.0.0/255.255.255.0' REQUIRE SSL;
"
$ mysql -h "${SOURCE_DB_HOST}" -P "${SOURCE_DB_PORT}" -u "${SOURCE_DB_USERNAME}" -p"${SOURCE_DB_PASSWORD}" \
-e "SELECT user, host FROM mysql.user;"
レプリケーションを有効化する。
$ TARGET_DB_HOST=ciaocamera-test-camdb-2-camdbcluster-1273n8c5k2o8r.cluster-ce5bbgu32bs2.ap-northeast-1.rds.amazonaws.com
$ TARGET_DB_PORT=56306
$ TARGET_DB_USERNAME=ciao
$ TARGET_DB_PASSWORD=cc-pw.2020
$ BINLOG_FILENAME=mysql-bin-changelog.000005
$ BINLOG_POSITION=120
$ mysql -h "${TARGET_DB_HOST}" -P "${TARGET_DB_PORT}" -u "${TARGET_DB_USERNAME}" -p"${TARGET_DB_PASSWORD}" \
-e "
CALL mysql.rds_set_external_master ('${SOURCE_DB_HOST}', ${SOURCE_DB_PORT}, '${REPL_USERNAME}', '${REPL_PASSWORD}', '${BINLOG_FILENAME}', ${BINLOG_POSITION}, 0);
CALL mysql.rds_start_replication;
"
確認
$
mysql -h "${SOURCE_DB_HOST}" -P "${SOURCE_DB_PORT}" -u "${SOURCE_DB_USERNAME}" -p"${SOURCE_DB_PASSWORD}" \
-e "SHOW SLAVE STATUS;"
$ mysql -h "${TARGET_DB_HOST}" -P "${TARGET_DB_PORT}" -u "${TARGET_DB_USERNAME}" -p"${TARGET_DB_PASSWORD}" \
-e "SHOW SLAVE STATUS;"
MEMO
$ mysql -h "${SOURCE_DB_HOST}" -P "${SOURCE_DB_PORT}" -u "${SOURCE_DB_USERNAME}" -p"${SOURCE_DB_PASSWORD}" \
-e "DROP USER '${REPL_USERNAME}'@'10.0.0.0/255.255.255.0';"
$
$ mysql -h "${TARGET_DB_HOST}" -P "${TARGET_DB_PORT}" -u "${TARGET_DB_USERNAME}" -p"${TARGET_DB_PASSWORD}" \
-e "SELECT user, host FROM mysql.user;"
$ mysql -h "${TARGET_DB_HOST}" -P "${TARGET_DB_PORT}" -u "repl_user" -p"repl-pw.2020" \
-e "STOP SLAVE;"
$ mysqldump -h "${SOURCE_DB_HOST}" -P "${SOURCE_DB_PORT}" -u "${SOURCE_DB_USERNAME}" -p"${SOURCE_DB_PASSWORD}" \ --skip-column-statistics --master-data --single-transaction \ --all-databases > all.dump
全データベース
$ mysqldump -h "${SOURCE_DB_HOST}" -P "${SOURCE_DB_PORT}" -u "${SOURCE_DB_USERNAME}" -p"${SOURCE_DB_PASSWORD}" \
--skip-column-statistics \
--all-databases > all.dump
本番データベース
$ SOURCE_DB_HOST=ciaocam-db-20180102-cluster.cluster-cgbyhhzybdlu.ap-northeast-1.rds.amazonaws.com
$ SOURCE_DB_PORT=56306
$ SOURCE_DB_USERNAME=ciao
$ SOURCE_DB_PASSWORD=14-fnRco
$ mysqldump -h "${SOURCE_DB_HOST}" -P "${SOURCE_DB_PORT}" -u "${SOURCE_DB_USERNAME}" -p"${SOURCE_DB_PASSWORD}" \
--skip-column-statistics --master-data --single-transaction \
--all-databases > all.dump
https://qiita.com/kenjiszk/items/dbfecccb522cb1306c1f