ApsaraDB RDS for MySQL のネイティブレプリケーションを使用すると、追加の移行ツールや有料のデータ転送サービスなしで、標準の MySQL レプリケーションを使用して、自己管理 MySQL データベースから RDS インスタンスにデータを直接レプリケーションできます。
ユースケース
-
最小限のダウンタイムでのクラウド移行: 自己管理データベースの完全バックアップをインポートし、アプリケーションを切り替える準備ができるまで、レプリケーションを介して RDS インスタンスを同期させ続けます。
-
ハイブリッドデータ同期: 段階的な移行やディザスタリカバリ設定の際など、オンプレミスの MySQL とクラウドの RDS インスタンスを継続的に同期させます。
-
マルチクラウドレプリケーション: 別のクラウドプロバイダー上の MySQL データベースから ApsaraDB RDS for MySQL インスタンスにデータをレプリケーションします。
前提条件
開始する前に、以下を確認してください:
-
データベースバージョン: MySQL 5.7 (マイナーバージョン 20240930 以降) または MySQL 8.0 (マイナーバージョン 20250531 以降)
-
プロダクトシリーズ: Basic Edition
-
課金方法: サブスクリプションまたは従量課金
-
リージョン: 中国 (上海)、中国 (北京)、中国 (深セン)、中国 (広州)、または中国 (成都)
ネイティブレプリケーションは現在、上記のリージョンでのみ利用可能です。他のリージョンで必要な場合は、してください。
Serverless のネイティブレプリケーションインスタンスを使用するには、まず従量課金インスタンスを作成し、ネイティブレプリケーションを有効にしてから、課金方法を Serverless に変更します。
課金
-
ネイティブレプリケーションが有効な新規インスタンス: 標準のインスタンス料金が適用されます。ネイティブレプリケーション機能自体に追加料金はかかりません。
-
既存のインスタンスのアップグレード: 追加料金はかかりません。
-
Object Storage Service (OSS) 経由でのデータインポート: バックアップファイルが OSS に保存されている期間、OSS ストレージ料金が適用されます。
制限事項
機能上の制限
-
ネイティブレプリケーションがアクティブな間、インスタンスは 読み取り専用 モードで動作します。
-
メジャーバージョンのアップグレードはサポートされていません。
-
メジャーバージョン間のレプリケーションはサポートされていません。自己管理 MySQL データベースと RDS ネイティブレプリケーションインスタンスは、同じメジャーバージョン (例:両方とも MySQL 8.0) を実行する必要があります。
-
プロダクトシリーズのアップグレード (例:Basic Edition から High-availability Edition または Cluster Edition へ) はサポートされていません。
-
VPC の切り替えはサポートされていません。
-
データベースとテーブルの復元はサポートされていません。
-
既存のインスタンスをネイティブレプリケーションインスタンスにアップグレードすると、約 30 秒の一時的な切断が発生する可能性があります。この操作はオフピーク時間に実行し、アプリケーションに再接続メカニズムがあることを確認してください。
権限に関する制限
特権アカウントの範囲
ネイティブレプリケーションの一部の SUPER 権限は、RDS インスタンスの特権アカウントに付与されます。特権アカウントのみが、CHANGE MASTER TO (MySQL 5.7) や CHANGE REPLICATION SOURCE TO (MySQL 8.0) などのネイティブレプリケーションコマンドを実行できます。
レプリケーション権限の許可リスト
ネイティブレプリケーションが外部ソースからバイナリログイベントを適用する際、最初に権限をチェックします。以下のリストを超える権限を必要とする操作はすべて拒否され、レプリケーションが中断されます:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE,
DROP, RELOAD, PROCESS, REFERENCES, INDEX,
ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES,
LOCK TABLES, EXECUTE, REPLICATION SLAVE,
REPLICATION CLIENT, CREATE VIEW, SHOW VIEW,
CREATE ROUTINE, ALTER ROUTINE, CREATE USER,
EVENT, TRIGGER ON *.* TO XXX;
システムデータベースの制限
システムデータベースに対するすべての操作は、レプリケーション中に無視されます。システムデータベースには、mysql、sys、information_schema、performance_schema、および __recyclebin__ が含まれます。
CREATE USERやGRANTなど、間接的にシステムデータベースを変更する操作は無視されません。これらの操作は、レプリケーション権限の許可リストに準拠する必要があります。GRANT SUPER ON *.* TO xxx;のように、付与された権限を超えるステートメントは、レプリケーションを中断させます。
GTID の制限
ApsaraDB RDS for MySQL では、グローバルトランザクション識別子 (GTID) モードを有効にする必要があり、無効にすることはサポートされていません。外部の MySQL データベースからレプリケーションするには、ソースでも GTID が有効になっている必要があります。
レプリケーションを設定する前に、ソースデータベースで以下を実行して GTID のステータスを確認します:
SHOW VARIABLES LIKE 'gtid_mode';
GTID が有効でない場合は、以下を実行します:
SET GLOBAL gtid_mode = ON;
メンテナンス時の動作
サーバー間の移行やマイナーバージョンのアップグレードなどのメンテナンス操作中、ネイティブレプリケーションコマンドの権限とパラメーター変更の権限は一時的に取り消されます。レプリケーションプロセス自体は影響を受けません。権限はメンテナンス完了後に自動的に復元されます。
ネイティブレプリケーションの権限
ネイティブレプリケーションインスタンスの特権アカウントには、標準の RDS インスタンスでは利用できない追加の権限があります。
レプリケーションコマンド
| コマンド (MySQL 5.7) | コマンド (MySQL 8.0) | 説明 |
|---|---|---|
CHANGE MASTER TO |
CHANGE REPLICATION SOURCE TO |
レプリケーションのソースと開始位置を構成します。詳細については、MySQL 5.7 のドキュメントをご参照ください。 |
START SLAVE |
START REPLICA |
レプリケーションプロセスを開始します。 |
STOP SLAVE |
STOP REPLICA |
レプリケーションプロセスを停止します。 |
RESET SLAVE |
RESET REPLICA |
ソースからのレプリケーションを再開するために、レプリカの状態をリセットします。 |
パラメーター変更
特権アカウントは、以下の実行時パラメーターも変更できます:
-
`SET GLOBAL read_only = ON/OFF;` — インスタンスを読み取り専用 (ON) モードと読み取り/書き込み (OFF) モードの間で切り替えます。
-
`SET SESSION sql_log_bin = ON/OFF;` — 現在のセッションの SQL ステートメントをバイナリログに記録するかどうかを制御します。
-
`SET SESSION GTID_NEXT = "<gtid_value>";` — 次のトランザクションの GTID 値を設定します。
ステップ 1: ネイティブレプリケーションの有効化
新規インスタンスでのネイティブレプリケーションの有効化
新しい ApsaraDB RDS for MySQL インスタンスを作成する際、[標準作成] ページで一番下までスクロールし、[その他] を展開して、[ネイティブレプリケーション] スイッチをオンにします。
このスイッチは、インスタンスの構成が前提条件を満たしている場合にのみ表示されます。
既存のインスタンスでのネイティブレプリケーションの有効化
既存のインスタンスをアップグレードすると、約 30 秒の一時的な切断が発生します。この操作はオフピーク時間に実行し、アプリケーションに再接続メカニズムがあることを確認してください。
-
RDS インスタンスページに移動し、リージョンを選択して、ターゲットインスタンスの ID をクリックします。
-
左側のナビゲーションウィンドウで [ネイティブレプリケーション] をクリックし、次に [有効化] をクリックします。
-
ダイアログボックスの情報を確認し、[OK] をクリックします。
公式の ApsaraDB RDS サービスアカウントが、ご利用の OSS へのアクセス権限や Elastic Network Interface (ENI) の作成およびアタッチ権限をまだ持っていない場合は、ダイアログボックスで対応するチェックボックスを選択してこれらの権限を付与してください。
ステップ 2: ネットワーク接続の構成
データをインポートする前に、自己管理 MySQL データベースがネットワーク経由で RDS インスタンスと通信できることを確認してください。
| シナリオ | 構成 | 料金 |
|---|---|---|
| 同じ VPC 内の Elastic Compute Service (ECS) 上の自己管理 MySQL | ネットワーク接続はデフォルトで利用可能です。ECS セキュリティグループを構成して、RDS インスタンスの IP からのポート 3306 へのインバウンドトラフィックを許可します。RDS インスタンスの IP を取得するには、インスタンスに接続して SHOW VARIABLES LIKE 'report_host'; を実行します。 |
なし |
| Alibaba Cloud 上の VPC 間またはクロスリージョン | VPC ピアリング接続または Cloud Enterprise Network (CEN) を使用します。 | VPC ピアリング接続料金が適用されます。CEN インスタンスは無料ですが、データ転送と帯域幅の料金が適用される場合があります。 |
| オンプレミスのデータセンターからクラウドへ | VPN ゲートウェイまたは専用回線を使用して、データセンターを VPC に接続します。 | 料金は方法によって異なります。詳細については、公式ドキュメントをご参照ください。 |
| 別のクラウドプロバイダーから ApsaraDB RDS へ | VPN または専用回線を使用して、クラウド間のネットワーク接続を確立します。 | 料金は方法によって異なります。詳細については、公式ドキュメントをご参照ください。 |
| パブリックネットワーク (非推奨) | ApsaraDB RDS のネイティブレプリケーションインスタンスはパブリックネットワークアクセスをサポートしています。この方法はセキュリティリスクのため推奨されません。 | 料金は方法によって異なります。 |
完全なリファレンスについては、「接続とネットワーク」をご参照ください。
ステップ 3: 完全データのインポートとレプリケーションの設定
自己管理データベースの完全バックアップを RDS にインポートし、増分レプリケーションを設定して 2 つのデータベースを同期させます。
Percona XtraBackup のインストールとソースデータベースのバックアップ
自己管理データベースのホストに Percona XtraBackup をインストールします。
CentOS へのインストール
MySQL 5.7 の場合:
wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/redhat/8/x86_64/percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
yum localinstall percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
MySQL 8.0 の場合:
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
yum localinstall percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
Ubuntu へのインストール
MySQL 5.7 の場合:
wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/redhat/8/x86_64/percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
yum localinstall percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
MySQL 8.0 の場合:
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
yum localinstall percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
Ubuntu 上の XtraBackup には qpress が含まれていません。別途インストールしてください:
sudo apt-get install -y qpress
バックアップの作成
以下のコマンドは、主に InnoDB ストレージエンジンを使用するデータベース用です。データベースに MyISAM テーブルが含まれている場合は、代わりに innobackupex コマンドを使用してください。
3 つの圧縮方法がサポートされています。いずれか 1 つを選択してください:
方法 1: デフォルトの qpress 圧縮
xtrabackup --backup \
--host=127.0.0.1 \
--port=3306 \
--user=<user_of_self-managed_MySQL> \
--password=<password> \
--stream=xbstream \
--compress > ./<backup_file_name>.xb
方法 2: QuickLZ 圧縮
XtraBackup バージョン 8.0.34-29 以前が必要です。詳細については、Percona XtraBackup のドキュメントをご参照ください。
xtrabackup --backup \
--host=127.0.0.1 \
--port=3306 \
--user=<user_of_self-managed_MySQL> \
--password=<password> \
--stream=xbstream \
--compress > ./<backup_file_name>_qp.xb
方法 3: Zstandard (zstd) 圧縮
xtrabackup --backup \
--host=127.0.0.1 \
--port=3306 \
--user=<user_of_self-managed_MySQL> \
--password=<password> \
--stream=xbstream \
| zstd -q - > ./<backup_file_name>.xb.zstd
バックアップのインポートとレプリケーションの設定
2 つのインポート方法が利用可能です。バックアップファイルを OSS にアップロードできる場合は、方法 1 を使用します。環境に制約があり、直接ストリーミングが望ましい場合は、方法 2 を使用します。
方法 1: OSS からバックアップファイルをインポートする
バックアップを OSS バケットにアップロードする
OSS バケットは、RDS インスタンスと同じリージョンにある必要があります。
ossutil をインストールします:
yum install -y unzip
sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
ossutil config
バックアップファイルをアップロードします:
ossutil -e <OSS_Endpoint> -i <your_AccessKeyId> -k <your_AccessKeySecret> cp <backup_file_name> oss://<bucket_name>/
バックアップを RDS にインポートする
-
RDS インスタンスページに移動し、リージョンを選択して、インスタンス ID をクリックします。
-
左側のナビゲーションウィンドウで [ネイティブレプリケーション] をクリックします。
-
[完全データのインポート] をクリックし、パラメーターを構成して [OK] をクリックします。
| カテゴリ | パラメーター | 説明 |
|---|---|---|
| バックアップアップロード方法 (必須) | MySQL バージョン | [5.7] または [8.0] として自動的に表示されます。構成は不要です。 |
| インポート方法 | [OSS からインポート] を選択します。 | |
| OSS バケット | バックアップファイルが含まれている OSS バケットを選択します。 | |
| OSS ファイル名 | バックアップファイルを選択します。ファイルがサブディレクトリにある場合は、完全なパスを入力します。サポートされているフォーマット: .xb (xbstream)、_qp.xb (QuickLZ)、.xb.zst (zstd)。 |
|
| 自動レプリケーション設定 (オプション) | 自動レプリケーション構築 | インポート後にソースデータベースからのレプリケーションを自動的に設定するには、このスイッチをオンにします。オフのままにした場合は、インポート後に手動でレプリケーションを設定します。 |
| ソース IP アドレス | ソースの自己管理データベースの IP アドレス。 | |
| ソースポート | ソースの自己管理データベースのポート。 | |
| ソースアカウント | ソースデータベースのアカウント。REPLICATION CLIENT および REPLICATION SLAVE 権限が必要です。 |
|
| アカウントのパスワード | ソースアカウントのパスワード。 |
方法 2: バックアップを直接 RDS にストリーミングする
backup-helper ツールをインストールし、バックアップストリームを開始する
# backup-helper ツールをインストールします
wget -O backup-helper https://mysql-backup-helper.oss-cn-beijing.aliyuncs.com/v1.0.0-alpha/backup-helper && chmod +x backup-helper
# バックアップストリームを開始します (MySQL と対応する XtraBackup バージョンのインストールが必要です)
./backup-helper --backup --mode=stream --host=<MySQL_IP> --port=<MySQL_port> --user=<MySQL_account> --password=<MySQL_password>
ストリームを RDS にインポートする
-
ApsaraDB RDS コンソールにログインし、リージョンを選択して、インスタンス ID をクリックします。
-
左側のナビゲーションウィンドウで [ネイティブレプリケーション] をクリックします。
-
[完全データのインポート] をクリックし、パラメーターを構成して [OK] をクリックします。
| カテゴリ | パラメーター | 説明 |
|---|---|---|
| バックアップアップロード方法 (必須) | MySQL バージョン | [5.7] または [8.0] として自動的に表示されます。構成は不要です。 |
| インポート方法 | [直接ストリームバックアップ] を選択します。 | |
| ソースバックアップ IP アドレス | バックアップストリームに使用される IP アドレス。 | |
| ソースバックアップポート | バックアップストリームに使用されるポート。デフォルト: 9999。 | |
| 自動レプリケーション設定 (オプション) | レプリケーションの自動構築 | インポート後にソースデータベースからのレプリケーションを自動的に設定するには、このスイッチをオンにします。オフのままにした場合は、インポート後に手動でレプリケーションを設定します。 |
| ソース IP アドレス | ソースの自己管理データベースの IP アドレス。 | |
| ソースポート | ソースの自己管理データベースのポート。 | |
| ソースアカウント | ソースデータベースのアカウント。REPLICATION CLIENT および REPLICATION SLAVE 権限が必要です。 |
|
| アカウントのパスワード | ソースアカウントのパスワード。 |
手動でのレプリケーション設定 (必要な場合)
インポート中に [レプリケーションの自動構築] を有効にしなかった場合、または自動設定が失敗して回復できない場合は、レプリケーションリンクを手動で設定します。
-
RDS インスタンスで特権アカウントを作成します。
-
ソースの自己管理データベースで、レプリケーションアカウントを作成し、必要な権限を付与します:
-- レプリケーションアカウントを作成します。本番環境では、'%' の代わりに許可する IP アドレスを制限してください。 -- 'Test123!' を強力なパスワードに置き換えてください。 CREATE USER 'replica'@'%' IDENTIFIED BY 'Test123!'; -- レプリケーション権限を付与します GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica'@'%'; -- 変更を適用します FLUSH PRIVILEGES; -
特権アカウントを使用して RDS インスタンスにログインし、以下のコマンドを実行します: MySQL 5.7
-- レプリケーションソースを構成します CHANGE MASTER TO MASTER_HOST='<source_IP>', MASTER_PORT='<source_port>', MASTER_USER='<replication_account>', MASTER_PASSWORD='<replication_account_password>', MASTER_AUTO_POSITION=1; -- レプリケーションを開始します START SLAVE; -- レプリケーションステータスを確認します SHOW SLAVE STATUS;MySQL 8.0
-- レプリケーションソースを構成します CHANGE REPLICATION SOURCE TO SOURCE_HOST='<source_IP>', SOURCE_PORT='<source_port>', SOURCE_USER='<replication_account>', SOURCE_PASSWORD='<replication_account_password>', SOURCE_AUTO_POSITION=1; -- レプリケーションを開始します START REPLICA; -- レプリケーションステータスを確認します SHOW REPLICA STATUS;
レプリケーションステータスの確認
RDS インスタンスの [ネイティブレプリケーション] ページで、レプリケーションステータスを確認します。[実行中] と表示されたら、レプリケーションリンクはアクティブで、データは同期されています。
ネイティブレプリケーションの無効化
アプリケーションを切り替える準備ができたとき、またはレプリケーションが不要になったときは、ネイティブレプリケーションを無効にして、インスタンスを読み取り/書き込みモードに戻します。
-
RDS インスタンスページに移動し、リージョンを選択して、インスタンス ID をクリックします。
-
左側のナビゲーションウィンドウで [ネイティブレプリケーション] をクリックし、次に [無効化] をクリックします。
-
[OK] をクリックします。
[OK] をクリックすると、ソースデータベースからのレプリケーションリンクが終了します。RDS インスタンスは標準の ApsaraDB RDS for MySQL インスタンスに戻り、読み取り専用モードから読み取り/書き込みモードに切り替わり、書き込み操作が可能になります。
API リファレンス
| 操作 | API | 注記 |
|---|---|---|
| ネイティブレプリケーションを使用してインスタンスを作成する | CreateDBInstance | ExternalReplication を ON に設定します。基本的なインスタンス構成は前提条件を満たす必要があります。 |
| 既存のインスタンスにネイティブレプリケーションリンクを設定する | ImportUserBackupFile | — |