この方法は、移行中にセルフマネージド MySQL インスタンスをオフラインにできる場合に使用します。Percona XtraBackup でフル物理バックアップを取得し、Object Storage Service (OSS) にストリーミングして、ApsaraDB RDS コンソール経由でインポートすることで、新しい RDS インスタンスを作成します。
データベースをオフラインにできない場合は、Data Transmission Service (DTS) を使用して、最小限のダウンタイムで移行します。
前提条件
開始する前に、以下が用意されていることを確認してください。
制限事項
続行する前に、以下の制限事項を確認してください。
カテゴリ | 制約 |
[MySQL バージョン] | ソースは MySQL 5.7.32 以前、または MySQL 8.0.18 以前である必要があります。ソースと移行先は同じ MySQL バージョンである必要があります。 |
バックアップツール | MySQL 5.7 には Percona XtraBackup 2.4 が、MySQL 8.0 には Percona XtraBackup 8.0 が必要です。 |
バックアップ範囲 | フルバックアップのみ。差分バックアップファイルとログバックアップファイルはサポートされていません。バックアップ完了後に生成された増分データは含まれません。 |
XtraBackup オプション |
|
バックアップファイル形式 | ファイルは |
OSS 暗号化 | OSS バケットを作成するときは、[暗号化方式] を [なし] に設定します。暗号化されたバケットはサポートされていません。 |
OSS リージョン | OSS バケットは RDS インスタンスと同じリージョンにある必要があります。 |
OSS ファイルサイズ | CLI 経由でパート単位でアップロードする場合、最大 16 TB です。 |
データディレクトリ |
|
InnoDB 設定 |
|
移行先 | データは新しい RDS インスタンスにのみ復元でき、既存のインスタンスには復元できません。移行先は、RDS Basic Edition で標準 SSD を使用し、MySQL 5.7 または MySQL 8.0 を実行している従量課金インスタンスである必要があります。 |
ストレージ | 移行先の RDS インスタンスには、ソースデータよりも大きいストレージ容量が必要です。 |
移行されないもの | ユーザーアカウント、カスタム関数、ストアドプロシージャ、タイムゾーン情報は移行されません。移行前にこれらを控えておき、移行後に手動で追加してください。 |
GTID ベースのレプリケーション | 移行後に増分データをレプリケートする予定がある場合は、ソースインスタンスで GTID ベースのレプリケーションを有効にし、 |
AliyunRDSImportRole | ApsaraDB RDS に OSS へのアクセスを承認すると、Resource Access Management (RAM) に |
バックアップの保持 | 移行が完了する前に OSS からバックアップファイルを削除しないでください。 |
移行されないオブジェクトの特定
ソースインスタンスで次のクエリを実行して、移行後に再作成する必要があるストアドプロシージャと関数をリストアップします。
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE
FROM information_schema.routines
WHERE ROUTINE_SCHEMA NOT IN ('sys', 'information_schema', 'performance_schema', 'mysql');続行する前に、ユーザーアカウントとタイムゾーンの設定も控えておいてください。
仕組み
セルフマネージド MySQL インスタンスを実行しているホストに Percona XtraBackup をインストールします。
backup_helper(互換性チェック) とoss_stream(OSS へのアップロード) を提供する MySQL Backup Helper をインストールします。互換性チェックを実行し、フルバックアップを取得して、OSS に直接ストリーミングします。次に、ApsaraDB RDS コンソール経由でバックアップファイルをインポートして、新しい RDS インスタンスを作成します。
このガイドでは、CentOS Linux V8.3.2011 を実行している Elastic Compute Service (ECS) インスタンスを使用します。Ubuntu 固有の手順については、「付録1:Ubuntu への Percona XtraBackup のインストール」および「付録2:Ubuntu への Go と Unzip のインストール」をご参照ください。
手順1:Percona XtraBackup のインストール
手順2:MySQL Backup Helper のインストール
MySQL Backup Helper は、インスタンスが移行をサポートしているかどうかをチェックする backup_helper と、バックアップを OSS に直接ストリーミングする oss_stream の 2 つのツールを提供します。
依存関係のインストール (CentOS)
sudo yum install -y go
sudo yum install -y unzipUbuntu の場合は、「付録2」をご参照ください。
MySQL Backup Helper のビルド
ソースコードをダウンロードします。
wget https://github.com/aliyun/mysql-backup-helper/archive/refs/heads/master.zipパッケージを解凍します。
unzip master.zipbackup_helperのビルド:cd mysql-backup-helper-master go build -a -o backup_helper main.gooss_streamのビルド:cd oss_stream go build -a -o oss_stream oss_stream.go
手順3:バックアップと移行
3.1 移行の互換性チェック
backup_helper を実行して、ソースインスタンスが移行をサポートしていることを検証します:
cd ~/mysql-backup-helper-master && ./backup_helper \
-host <host-ip> \
-port <port> \
-user <username> \
--password <password>プレースホルダーを実際の値に置き換えます。
プレースホルダー | 説明 | 例 |
| MySQL インスタンスを実行しているホストの IP アドレス |
|
| MySQL ポート |
|
| root アカウントのユーザー名 |
|
| root アカウントのパスワード |
|
チェックに合格したら、次の手順に進みます。
3.2 バックアップと OSS へのアップロード
Percona XtraBackup は、パスワードを含む完全なコマンドラインを、バックアップ内の xtrabackup_info ファイルに書き込みます。アップロードが完了したら、このファイルが機密性の高い資格情報を公開していないことを確認してください。
バックアップを実行し、OSS バケットに直接ストリーミングします。お使いの MySQL バージョンに対応するコマンドを選択してください。
MySQL 5.7
MySQL 5.7 — innobackupex を使用します:
innobackupex --backup \
--host=<host-ip> \
--port=<port> \
--user=<username> \
--password=<password> \
--stream=xbstream \
--compress <temp-dir> | \
./mysql-backup-helper-master/oss_stream/oss_stream \
-accessKeyId <AccessKey-ID> \
-accessKeySecret <AccessKey-secret> \
-bucketName <bucket-name> \
-endpoint <OSS-endpoint> \
-objectName <backup-file-name>例:
innobackupex --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ \
--stream=xbstream --compress /root/mysql/data | \
./mysql-backup-helper-master/oss_stream/oss_stream \
-accessKeyId LTAI**************** \
-accessKeySecret ****** \
-bucketName test \
-endpoint oss-ap-southeast-1.aliyuncs.com \
-objectName backup_qp.xbMySQL 8.0
MySQL 8.0 では xtrabackup を使用します:
xtrabackup --backup \
--host=<host-ip> \
--port=<port> \
--user=<username> \
--password=<password> \
--stream=xbstream \
--compress <temp-dir> | \
./mysql-backup-helper-master/oss_stream/oss_stream \
-accessKeyId <AccessKey-ID> \
-accessKeySecret <AccessKey-secret> \
-bucketName <bucket-name> \
-endpoint <OSS-endpoint> \
-objectName <backup-file-name>例:
xtrabackup --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ \
--stream=xbstream --compress /root/mysql/data | \
./mysql-backup-helper-master/oss_stream/oss_stream \
-accessKeyId LTAI**************** \
-accessKeySecret ******** \
-bucketName test \
-endpoint oss-ap-southeast-1.aliyuncs.com \
-objectName backup_qp.xbプレースホルダーを実際の値に置き換えます。
プレースホルダー | 説明 | 例 |
| MySQL インスタンスを実行しているホストの IP アドレス |
|
| MySQL ポート |
|
| root アカウントのユーザー名 |
|
| root アカウントのパスワード |
|
| バックアップ用の一時ディレクトリ |
|
| Alibaba Cloud の AccessKey ID |
|
| Alibaba Cloud の AccessKey Secret |
|
| OSS バケットの名前 |
|
| OSS バケットのエンドポイント |
|
| OSS 内のバックアップオブジェクトに割り当てる名前 |
|
大規模なデータベースでは、セッションが切断された場合でもコマンドが中断されないように、nohup を使用してコマンドを実行します。 MySQL 5.7: MySQL 8.0:nohup sh -c 'innobackupex --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ --stream=xbstream --compress /root/mysql/data | ./mysql-backup-helper-master/oss_stream/oss_stream -accessKeyId LTAI**************** -accessKeySecret ****** -bucketName test -endpoint oss-ap-southeast-1.aliyuncs.com -objectName backup_qp.xb' &nohup sh -c 'xtrabackup --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ \
--stream=xbstream --compress /root/mysql/data | \
./mysql-backup-helper-master/oss_stream/oss_stream \
-accessKeyId LTAI**************** -accessKeySecret ****** \
-bucketName test -endpoint oss-ap-southeast-1.aliyuncs.com -objectName backup_qp.xb' &バックアップが完了すると、ターミナルに completed OK ! が表示されます。
OSS コンソールにログインして、ファイルが正常にアップロードされたことを確認します。アップロードに失敗した場合は、バックアップコマンドを再度実行してください。
OSS が一時的に利用できない場合は、まずバックアップをローカルファイルに保存し、後でアップロードします。「付録3:ローカルへのバックアップと OSS へのアップロード」をご参照ください。
3.3 ApsaraDB RDS コンソールでのバックアップのインポート
ApsaraDB RDS コンソールにログインします。上部メニューで、移行先の RDS インスタンスのリージョンを選択します。左側のナビゲーションペインで、[バックアップ] をクリックします。
[ユーザーバックアップ] タブで、[バックアップのインポート] をクリックします。
[インポートガイド] ウィザードで指示を読み、「3. データのインポート」画面が表示されるまで [次へ] をクリックします。
ウィザードの「1. ソースデータベースのバックアップ」と[「2. OSSへのバックアップファイルのアップロード」]の手順は、このガイドの手順 3.1 と 3.2 に対応します。
「3. データのインポート」画面で、次のパラメーターを設定し、[OK] をクリックします。
ApsaraDB RDS が OSS へのアクセスを承認されていない場合は、この手順の下部にある[承認] をクリックします。表示されたページで、[承認ポリシーの確認] をクリックします。
パラメーター
説明
[MySQL バージョン]
[5.7/8.0] が自動的に表示されます。MySQL 5.7 と MySQL 8.0 の両方がサポートされています。
[リージョン]
バックアップファイルを保存する OSS バケットのリージョン。移行先の RDS インスタンスのリージョンと一致する必要があります。
[OSS バケット]
バックアップファイルが保存されている OSS バケット。詳細については、「オブジェクトのアップロード」をご参照ください。
[OSS ファイル名]
OSS バケット内のバックアップオブジェクト。 あいまい一致と完全一致をサポートします。 ファイルは
_QP.XB形式、またはTAR.GZとして圧縮されている必要があります。[メモ]
バックアップファイルを識別するための任意の説明。
[ゾーン]
OSS バケットのゾーン。ゾーンを選択すると、ApsaraDB RDS が数秒でスナップショットを作成できるため、インポート時間が短縮されます。新しい RDS インスタンスはこのゾーンに作成されます。
[ストレージ容量]
バックアップファイルに必要なストレージ容量。有効な値:20~6000 GB。デフォルトはバックアップファイルサイズの 3 倍 (最小 20 GB) です。
[ユーザーバックアップ] タブで、検証タスクの [ステータス] が [検証中] から [完了] に変わるのを待ちます。
重要検証時間はさまざまです。バックアップ中に書き込みアクティビティや大規模なトランザクションが多いインスタンスは、検証に時間がかかる場合があります。
バックアップファイルを見つけ、[操作] 列の [復元] をクリックします。
次のパラメーターを設定し、[次へ:インスタンス設定] をクリックします。
パラメーター
説明
[プライマリノードのゾーン]
プライマリ RDS インスタンスのゾーン。バックアップファイルのインポート時にゾーンを選択しなかった場合にのみ表示されます。
[ストレージタイプ]
[ESSD PL1]:パフォーマンスレベル 1 のエンタープライズ SSD。[標準SSD]:標準の Elastic Block Storage デバイス。詳細については、「ストレージタイプ」をご参照ください。
[インスタンスタイプ]
[汎用 (エントリーレベル)]:排他的に割り当てられたメモリと I/O、共有 CPU とストレージ。完全なリストについては、「プライマリ ApsaraDB RDS インスタンスタイプ」をご参照ください。
[ストレージ容量]
データファイル、システムファイル、ログファイル、トランザクションファイル用のストレージ容量。5 GB 単位で調整可能です。
次のパラメーターを設定し、[次へ:注文の確認] をクリックします。
パラメーター
説明
[ネットワークタイプ]
[VPC] を選択します。Virtual Private Cloud (VPC) は、より高いセキュリティと優れたパフォーマンスを提供します。[VPC] と [プライマリノードのvSwitch] も設定する必要があります。RDS インスタンスに接続する ECS インスタンスは、同じ VPC 内にある必要があります。
[パラメーターテンプレート]
システムまたはカスタムのパラメーターテンプレート。「パラメーターテンプレートの使用」をご参照ください。
[タイムゾーン]
RDS インスタンスのタイムゾーン。
[テーブル名の大文字と小文字の区別]
ソースインスタンスのテーブル名で大文字と小文字が区別される場合は、[大文字/小文字を区別] を選択して一貫性を保ちます。
[パラメーター] セクションでインスタンス設定を確認し、[購入プラン] を設定し、利用規約に同意して、[今すぐ支払う] をクリックします。
ApsaraDB RDS がインスタンスを作成するのに 1~5 分かかります。
次のステップ
バックアップ保持期間の設定
デフォルトでは、インポートされたバックアップファイルは 3 日間保持されます。要件に応じて保持期間を調整してください。
ApsaraDB RDS コンソールにログインします。リージョンを選択し、左側のナビゲーションペインで [バックアップ] をクリックします。
バックアップファイルを見つけます。[有効期限] 列で、[保持期間の設定] をクリックします。
ドロップダウンリストから保持期間を選択するか、[カスタム保持期間] を選択して値を入力します。
[OK] をクリックします。
有効期限が 2099 年を超える場合は、[永続] と表示されます。
バックアップファイルへのタグの追加
ApsaraDB RDS コンソールにログインします。リージョンを選択し、[バックアップ] をクリックします。
バックアップファイルを見つけます。[タグ] 列で、[+追加] をクリックします。
ダイアログボックスで [ラベルを作成] をクリックし、[キー] と [値] を入力し、フィールドの横にある [OK] をクリックしてタグを作成し、右下隅の [OK] をクリックします。
既存のタグを使用するには、[ラベルを選択] ドロップダウンリストから選択します。
タグを更新するには、タグにカーソルを合わせ、[編集] をクリックします。ツールチップで、手順 3 を繰り返します。
増分リカバリのためのログデータの確認
バックアップ中にソースインスタンスでデータ変更が発生した場合、バックアップファイルには増分リカバリのためのログ情報が含まれています。
ApsaraDB RDS コンソールにログインします。リージョンを選択し、[バックアップ] をクリックします。
バックアップファイルを見つけ、[操作] 列の [詳細の表示] をクリックします。
表示されるメッセージで、ログデータを確認します。
Master_Log_File: 増分データを含む最初のログファイル。
Master_Log_Position: そのファイル内の増分データを含む最初のログエントリ。
バックアップ検証レコードのデフォルトの保持期間は 7 日間です。移行後、できるだけ早くソースインスタンスから移行先の RDS インスタンスに増分データをレプリケートしてください。
バックアップファイルの削除
バックアップファイルが不要になった場合は、ストレージコストを削減するために削除してください。
ApsaraDB RDS コンソールにログインします。リージョンを選択し、[バックアップ] をクリックします。
バックアップファイルを見つけ、[操作] 列の [削除] をクリックします。
確認ダイアログボックスで、[OK] をクリックします。
RDS インスタンスのアップグレード
移行後、新しい RDS インスタンスで次の操作を実行できます。
[ユーザーバックアップ] タブでのその他の操作
列のフィルター: 右上隅の
アイコンをクリックして、列を表示または非表示にします。
アイコンと
アイコンを使用して、非表示リスト (左) と表示リスト (右) の間で列を移動します。 [OK] をクリックします。インスタンスリストのエクスポート:
アイコンをクリックすると、バックアップ情報を CSV ファイルとしてエクスポートできます。更新:
アイコンをクリックして、[ユーザーバックアップ] タブを更新します。
付録1:Ubuntu への Percona XtraBackup のインストール
付録2:Ubuntu への Go と Unzip のインストール
付録3:ローカルへのバックアップと OSS へのアップロード
この方法は、バックアップ実行時に OSS が一時的に利用できない場合に使用します。
手順1:ローカルファイルへのバックアップ
お使いの MySQL バージョンに対応するコマンドを選択してください。
MySQL 5.7:
innobackupex --backup \
--host=<host-ip> --port=<port> \
--user=<username> --password=<password> \
--stream=xbstream --compress <temp-dir> \
> /<backup-dir>/<backup-file-name>_qp.xb例:
innobackupex --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ \
--stream=xbstream --compress /root/mysql/data > /root/backup_qp.xbMySQL 8.0:
xtrabackup --backup \
--host=<host-ip> --port=<port> \
--user=<username> --password=<password> \
--stream=xbstream --compress <temp-dir> \
> /<backup-dir>/<backup-file-name>_qp.xb例:
xtrabackup --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ \
--stream=xbstream --compress /root/mysql/data > /root/backup_qp.xb手順2:ローカルファイルの OSS へのアップロード
OSS が利用可能な場合は、oss_stream を使用してアップロードします:
cat /<backup-dir>/<backup-file-name>_qp.xb | \
./mysql-backup-helper-master/oss_stream/oss_stream \
-accessKeyId LTAI**************** \
-accessKeySecret ******** \
-bucketName test \
-endpoint oss-ap-southeast-1.aliyuncs.com \
-objectName backup_qp.xb例:
cat /root/backup_qp.xb | \
./mysql-backup-helper-master/oss_stream/oss_stream \
-accessKeyId LTAI**************** \
-accessKeySecret ******** \
-bucketName test \
-endpoint oss-ap-southeast-1.aliyuncs.com \
-objectName backup_qp.xb