ApsaraDB RDSのネイティブレプリケーション機能を使用して、既存のMySQLデータベースのセカンダリデータベースとしてRDS for MySQLインスタンスを作成できます。 このトピックでは、セカンダリRDS for MySQLデータベースをすばやく作成する方法と、MySQLのネイティブレプリケーション機能に基づいてデータ同期タスクを作成する方法について説明します。
前提条件
RDS Basic EditionでMySQL 5.7を実行するRDSインスタンスが作成され、RDSインスタンスのネイティブレプリケーション機能が有効になっています。 詳細については、「ネイティブレプリケーション機能の有効化」をご参照ください。
RDSインスタンス用に特権アカウントが作成されます。 詳細については、「アカウントの作成」をご参照ください。
プライマリデータベースが存在する仮想プライベートクラウド (VPC) は、ネイティブレプリケーションインスタンスが存在するVPCに接続されています。 詳細については、「ネットワーク設定の構成」をご参照ください。
手順の概要
セカンダリRDS for MySQLデータベースを作成するには、次の手順を実行する必要があります。
ソースデータベースで完全バックアップを実行します。
完全バックアップファイルをネイティブレプリケーションインスタンスにインポートします。
MySQLコマンドを実行してレプリケーションタスクを作成します。
解決策1: Percona XtraBackupを使用してストリーミングバックアップを実行し、OSSを使用してデータを保存し、ネイティブレプリケーションインスタンスを再構築します
メリット
ネイティブレプリケーションインスタンスは、Percona XtraBackupベースの物理バックアップと次の機能をサポートしています。
バックアップファイル内のグローバルトランザクション識別子 (GTID) を自動的に識別して、ポイントの位置合わせを自動化し、レプリケーションタスクを作成できます。
バックアップファイルをObject Storage Service (OSS) バケットにアップロードし、サーバーの暗号化を有効にしてデータのセキュリティを確保できます。
選択したバックアップセットを使用して、ネイティブレプリケーションインスタンスを再構築し、複雑なレプリケーションの中断を効率的に解決できます。
課金ルール
バックアップファイルをOSSバケットにアップロードすると、OSSストレージ料金が課金されます。 詳細については、「OSS課金可能アイテム」をご参照ください。
RDSインスタンスを作成すると、使用するインスタンスタイプとストレージ容量に基づいて課金されます。 詳細については、「ApsaraDB RDS課金項目」をご参照ください。
手順
ソースデータベースでストリーミングバックアップを実行するには、Percona XtraBackupを使用します。
ネイティブレプリケーション機能は、MySQL 5.7を実行するRDSインスタンスでのみサポートされます。 MySQL 5.7はPercona XtraBackup 2.4をサポートしています。
バックアップファイルを圧縮する場合は、QuickLZを使用できます。 バックアップ圧縮を有効にするには、
xtraabackup -- compress
コマンドを実行します。Percona XtraBackupをインストールします。
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm # Check whether Percona XtraBackup is installed. yum list | grep percona percona-release enable-only tools release yum install -y percona-xtrabackup-24
バックアップを実行します。
xtraabackupコマンドは、InnoDBストレージエンジンでサポートされています。 ソースデータベースがMyISAMストレージエンジンを使用している場合は、
innobackupex
コマンドを使用します。xtrabackup --backup \ --host=127.0.0.1 \ --port=3306 \ -- user=<Username of the account of the self-managed MySQL database> \ --password=<Password of the account> \ --stream=xbstream \ --compress > ./<Name of the backup file, such as backup_1206.xb>
バックアップファイルをOSSバケットにアップロードします。
ossutilやOSS SDKなど、さまざまなツールを使用してバックアップファイルをアップロードできます。 この例では、ossutilが使用されます。
ossutilをインストールします。
yum install -y unzip sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash ossutil config
バックアップファイルをOSSバケットにアップロードします。
ossutil -e <Endpoint of the OSS bucket> -i <AccessKey ID> -k <AccessKey Secret> cp <Backup file name> oss://<Bucket_name>/
RDSインスタンスを再構築します。
ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 管理するRDSインスタンスを見つけ、インスタンスIDをクリックします。 インスタンスの [基本情報] ページの右上隅にある [インスタンスの再構築] をクリックします。
表示されるページで、バケットとオブジェクトを選択し、[OK] をクリックします。
ネイティブレプリケーションタスクを作成します。
自己管理型MySQLデータベースにレプリケーションアカウントを作成します。
CREATE USER 'replica'@'%' IDENTIFIED BY 'Test123!'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;
RDSインスタンスに接続します。 詳細については、「クライアントまたはCLIを使用したApsaraDB RDS For MySQLインスタンスへの接続」をご参照ください。
mysql -hEndpoint -PPort number -uUsername -pPassword
重要RDSインスタンスに接続するには、RDSインスタンスの特権アカウントを使用する必要があります。
RDSインスタンスで次のステートメントを実行して、ネイティブレプリケーションタスクを作成します。
# Create a native replication task. CHANGE MASTER TO MASTER_HOST = '<IP address of the host on which the self-managed MySQL database resides>', MASTER_USER = '<Username of the replication account of the self-managed MySQL database>',MASTER_PASSWORD ='<Password of the replication account of the self-managed MySQL database>', MASTER_PORT = 3306,MASTER_AUTO_POSITION = 1; # Start replication. START SLAVE;
ネイティブレプリケーションタスクをデバッグします。
次のステートメントを実行して、レプリケーションのステータスを確認します。
SHOW SLAVE STATUS\G
レプリケーションエラーが発生した場合は、エラーメッセージに基づいてエラーをトラブルシューティングします。
レプリケーションが中断された場合は、[ログ] ページの [エラーログ] タブに移動してエラーの詳細を表示します。 レプリケーションの中断エラーと処理方法の詳細については、「ネットワーク設定の構成」をご参照ください。
解決策2: mysqldumpを使用して論理バックアップを実行し、DMSを使用してデータをインポートし、DMSでステートメントを実行します
メリット
このソリューションは使いやすく、対応するコンソールで完了できます。
課金ルール
RDSインスタンスを作成すると、使用するインスタンスタイプとストレージ容量に基づいて課金されます。 詳細については、「ApsaraDB RDS課金項目」をご参照ください。
手順
mysqldumpを使用して論理バックアップを実行し、SQLファイルを取得します。
Set GTID_PURGED
パラメーターをoffに設定します。 ApsaraDB RDSでは、SET GTID_PURGED
パラメーターを変更できません。 このパラメーターを有効にすると、SQL再生エラーが発生します。mysqldumpを使用してセカンダリデータベースレプリケーションタスクを作成する場合は、
-- master-data=2
オプションを追加して、CHANGE MASTER
ステートメントを含むコメントを自動的に生成できます。 これにより、バイナリログ情報を手動で入力する必要がなくなります。mysqldump --all-databases \ --single-transaction \ --order-by-primary \ --set-gtid-purged=off \ --master-data=2 \ -u local_user \ -p local_password \ -h 127.0.0.1 -P 3306 > data.sql
データ管理 (DMS) を使用して、論理バックアップファイルをインポートします。
DMSと特権アカウントを使用して、RDSインスタンスにログインします。 詳細については、「DMSを使用したApsaraDB RDS For MySQLインスタンスへのログイン」をご参照ください。
DMSコンソールの左上隅で、
アイコンの上にポインターを移動し、 を選択します。
説明DMSコンソールを通常モードで使用する場合は、上部のナビゲーションバーで
を選択します。[データ変更チケット] ページの [適用] セクションで、[アプリケーション] のデータ変更タイプに [大規模データのインポート] を選択します。 次に、必要なRDSインスタンスを選択し、論理バックアップSQLファイルをアップロードします。 他のパラメーターを設定する方法の詳細については、「データのインポート」をご参照ください。
DMSで次のステートメントを実行して、レプリケーションタスクを作成します。
重要DMSを使用して論理バックアップファイルをインポートすると、セカンダリデータベースに対して独立したバイナリログとGTIDが生成されます。 セカンダリデータベースをプライマリデータベースに切り替えると、余分なGTIDが他のデータベースにレプリケートされる可能性があります。 これは、複製を中断し得る。 この問題を防ぐには、次のいずれかの方法を使用します。
レプリケーションタスクを作成する前に、ネイティブレプリケーション機能を無効にしてから、その機能を再度有効にします。 このプロセスは、
RESET MASTER
動作をトリガする。空のトランザクションをレプリケーショントポロジの他のデータベースに挿入して、冗長なGTIDを上書きし、プレースホルダーとして機能します。
# Create a native replication task. CHANGE MASTER TO MASTER_HOST = '<IP address of the host on which the self-managed MySQL database resides>', MASTER_USER = '<Username of the replication account of the self-managed MySQL database>',MASTER_PASSWORD ='<Password of the replication account of the self-managed MySQL database>', MASTER_PORT = 3306,MASTER_LOG_FILE = '<SQL file name>',MASTER_LOG_POS = 190; # Start replication. START SLAVE; # View the replication status. SHOW SLAVE STATUS\G