すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ネイティブレプリケーション機能を使用して、ApsaraDB RDSインスタンスをセカンダリデータベースとして作成する

最終更新日:Dec 26, 2024

ApsaraDB RDSのネイティブレプリケーション機能を使用して、既存のMySQLデータベースのセカンダリデータベースとしてRDS for MySQLインスタンスを作成できます。 このトピックでは、セカンダリRDS for MySQLデータベースをすばやく作成する方法と、MySQLのネイティブレプリケーション機能に基づいてデータ同期タスクを作成する方法について説明します。

前提条件

  • RDS Basic EditionでMySQL 5.7を実行するRDSインスタンスが作成され、RDSインスタンスのネイティブレプリケーション機能が有効になっています。 詳細については、「ネイティブレプリケーション機能の有効化」をご参照ください。

  • RDSインスタンス用に特権アカウントが作成されます。 詳細については、「アカウントの作成」をご参照ください。

  • プライマリデータベースが存在する仮想プライベートクラウド (VPC) は、ネイティブレプリケーションインスタンスが存在するVPCに接続されています。 詳細については、「ネットワーク設定の構成」をご参照ください。

手順の概要

セカンダリRDS for MySQLデータベースを作成するには、次の手順を実行する必要があります。

  1. ソースデータベースで完全バックアップを実行します。

  2. 完全バックアップファイルをネイティブレプリケーションインスタンスにインポートします。

  3. MySQLコマンドを実行してレプリケーションタスクを作成します。

解決策1: Percona XtraBackupを使用してストリーミングバックアップを実行し、OSSを使用してデータを保存し、ネイティブレプリケーションインスタンスを再構築します

メリット

ネイティブレプリケーションインスタンスは、Percona XtraBackupベースの物理バックアップと次の機能をサポートしています。

  • バックアップファイル内のグローバルトランザクション識別子 (GTID) を自動的に識別して、ポイントの位置合わせを自動化し、レプリケーションタスクを作成できます。

  • バックアップファイルをObject Storage Service (OSS) バケットにアップロードし、サーバーの暗号化を有効にしてデータのセキュリティを確保できます。

  • 選択したバックアップセットを使用して、ネイティブレプリケーションインスタンスを再構築し、複雑なレプリケーションの中断を効率的に解決できます。

課金ルール

  • バックアップファイルをOSSバケットにアップロードすると、OSSストレージ料金が課金されます。 詳細については、「OSS課金可能アイテム」をご参照ください。

  • RDSインスタンスを作成すると、使用するインスタンスタイプとストレージ容量に基づいて課金されます。 詳細については、「ApsaraDB RDS課金項目」をご参照ください。

手順

  1. ソースデータベースでストリーミングバックアップを実行するには、Percona XtraBackupを使用します。

    ネイティブレプリケーション機能は、MySQL 5.7を実行するRDSインスタンスでのみサポートされます。 MySQL 5.7はPercona XtraBackup 2.4をサポートしています。

    バックアップファイルを圧縮する場合は、QuickLZを使用できます。 バックアップ圧縮を有効にするには、xtraabackup -- compressコマンドを実行します。

    1. 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
    2. バックアップを実行します。

      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>
  2. バックアップファイルをOSSバケットにアップロードします。

    ossutilやOSS SDKなど、さまざまなツールを使用してバックアップファイルをアップロードできます。 この例では、ossutilが使用されます。

    1. ossutilをインストールします。

      yum install -y unzip
      sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
      ossutil config
    2. バックアップファイルをOSSバケットにアップロードします。

      ossutil -e <Endpoint of the OSS bucket> -i <AccessKey ID> -k <AccessKey Secret> cp <Backup file name> oss://<Bucket_name>/
  3. RDSインスタンスを再構築します。

    1. ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 管理するRDSインスタンスを見つけ、インスタンスIDをクリックします。 インスタンスの [基本情報] ページの右上隅にある [インスタンスの再構築] をクリックします。

    2. 表示されるページで、バケットとオブジェクトを選択し、[OK] をクリックします。

  4. ネイティブレプリケーションタスクを作成します。

    1. 自己管理型MySQLデータベースにレプリケーションアカウントを作成します。

      CREATE USER 'replica'@'%' IDENTIFIED BY 'Test123!';
      GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica'@'%';
      FLUSH PRIVILEGES;
    2. RDSインスタンスに接続します。 詳細については、「クライアントまたはCLIを使用したApsaraDB RDS For MySQLインスタンスへの接続」をご参照ください。

      mysql -hEndpoint -PPort number -uUsername -pPassword
      重要

      RDSインスタンスに接続するには、RDSインスタンスの特権アカウントを使用する必要があります。

    3. 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;
    4. ネイティブレプリケーションタスクをデバッグします。

      次のステートメントを実行して、レプリケーションのステータスを確認します。

      SHOW SLAVE STATUS\G

      レプリケーションエラーが発生した場合は、エラーメッセージに基づいてエラーをトラブルシューティングします。

      レプリケーションが中断された場合は、[ログ] ページの [エラーログ] タブに移動してエラーの詳細を表示します。 レプリケーションの中断エラーと処理方法の詳細については、「ネットワーク設定の構成」をご参照ください。

解決策2: mysqldumpを使用して論理バックアップを実行し、DMSを使用してデータをインポートし、DMSでステートメントを実行します

メリット

このソリューションは使いやすく、対応するコンソールで完了できます。

課金ルール

RDSインスタンスを作成すると、使用するインスタンスタイプとストレージ容量に基づいて課金されます。 詳細については、「ApsaraDB RDS課金項目」をご参照ください。

手順

  1. mysqldumpを使用して論理バックアップを実行し、SQLファイルを取得します。

    1. Set GTID_PURGEDパラメーターをoffに設定します。 ApsaraDB RDSでは、SET GTID_PURGEDパラメーターを変更できません。 このパラメーターを有効にすると、SQL再生エラーが発生します。

    2. mysqldumpを使用してセカンダリデータベースレプリケーションタスクを作成する場合は、-- master-data=2オプションを追加して、CHANGE MASTERステートメントを含むコメントを自動的に生成できます。 これにより、バイナリログ情報を手動で入力する必要がなくなります。 image.png

      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
  2. データ管理 (DMS) を使用して、論理バックアップファイルをインポートします。

    1. DMSと特権アカウントを使用して、RDSインスタンスにログインします。 詳細については、「DMSを使用したApsaraDB RDS For MySQLインスタンスへのログイン」をご参照ください。

    2. DMSコンソールの左上隅で、2023-01-28_15-57-17.pngアイコンの上にポインターを移動し、[すべての機能] > [データベース開発] > [データ変更] > [データインポート] を選択します。

      説明

      DMSコンソールを通常モードで使用する場合は、上部のナビゲーションバーで [データベース開発] > [データ変更] > [データインポート] を選択します。

    3. [データ変更チケット] ページの [適用] セクションで、[アプリケーション] のデータ変更タイプに [大規模データのインポート] を選択します。 次に、必要なRDSインスタンスを選択し、論理バックアップSQLファイルをアップロードします。 他のパラメーターを設定する方法の詳細については、「データのインポート」をご参照ください。

  3. 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