ApsaraDB RDS for MariaDB はネイティブの MariaDB と完全に互換性があるため、データ移行は 2 台の MariaDB サーバー間でのデータ移動と同じ手順で実行できます。本トピックでは、mysqldump を用いた完全な移行手順を説明します。すなわち、ご利用の自己管理データベースからテーブルデータおよびストアドプロシージャをエクスポートし、それを RDS インスタンスにインポートします。
本トピックの例では、Linux 7 上で実行される MariaDB 10.2.4 を搭載したソースデータベースを使用します。
移行後、RDS インスタンス上のすべてのテーブル名は小文字で格納され、大文字・小文字を区別しなくなります。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
RDS インスタンスの IP アドレスホワイトリストを設定済みであること。詳細については、「ApsaraDB RDS for MariaDB インスタンスの IP アドレスホワイトリストの設定」をご参照ください。
RDS インスタンスのパブリックエンドポイントを取得済みであること。詳細については、「ApsaraDB RDS for MariaDB インスタンスのパブリックエンドポイントの申請またはリリース」をご参照ください。
データの移行
ステップ 1:ターゲットデータベースの作成
リモート接続ツールを使用して RDS インスタンスにログインし、移行先の空のデータベースを作成します。たとえば、test001 という名前のデータベースを作成します。詳細については、「ApsaraDB RDS for MariaDB インスタンスへの接続」をご参照ください。
ステップ 2:データファイルのエクスポート
エクスポート中にソースデータベースへの書き込みを行わないでください。同時書き込みにより、ダンプファイル内のデータが不整合になる可能性があります。
オンプレミスデータベースサーバー上で mysqldump コマンドを実行し、テーブルデータを SQL ファイルにエクスポートします。このコマンドでは、ストアドプロシージャ、トリガー、および関数は除外されます。これらはステップ 3 で個別にエクスポートします。
mysqldump -h localhost -u <username> -p --opt --default-character-set=utf8 --hex-blob <db_name> --skip-triggers > /tmp/<db_name>.sqlプレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 | 例 |
|---|---|---|
<username> | 自己管理データベースアカウントのユーザー名 | user |
<db_name> | エクスポート対象の自己管理データベース名 | testdb |
例:
mysqldump -h localhost -u user -p --opt --default-character-set=utf8 --hex-blob testdb --skip-triggers > /tmp/testdb.sqlmysqldump を実行するには、データベースアカウントに必要な権限が付与されている必要があります。必要な権限の完全な一覧については、mysqldump リファレンスをご参照ください。
ステップ 3:ストアドプロシージャ、トリガー、および関数のエクスポート
データベースにストアドプロシージャ、トリガー、または関数が含まれる場合は、それらを別のファイルにエクスポートします。sed コマンドは、ApsaraDB RDS for MariaDB との互換性を確保するために必須となる DEFINER 句を削除します。
mysqldump -h localhost -u <username> -p --opt --default-character-set=utf8 --hex-blob <db_name> -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/<db_name>_trigger.sql例:
mysqldump -h localhost -u user -p --opt --default-character-set=utf8 --hex-blob testdb -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/testdb_trigger.sqlソースデータベースにストアドプロシージャ、トリガー、または関数が存在しない場合は、本ステップをスキップしてください。
ステップ 4:RDS インスタンスへのインポート
以下のコマンドを実行して、データファイルおよびストアドプロシージャファイルをターゲットデータベースにインポートします。まずデータファイルをインポートしてください。
mysql -h <endpoint> -P <port> -u <username> -p <dest_db> < /tmp/<db_name>.sql
mysql -h <endpoint> -P <port> -u <username> -p <dest_db> < /tmp/<db_name>_trigger.sqlプレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 | 例 |
|---|---|---|
<endpoint> | RDS インスタンスのパブリックエンドポイント | rm-bpxxxxx.mariadb.rds.aliyuncs.com |
<port> | RDS インスタンスのパブリックポート | 3306 |
<username> | RDS インスタンス上の特権アカウントのユーザー名 | testuser |
<dest_db> | RDS インスタンス上のターゲットデータベース名 | test001 |
<db_name> | 自己管理データベース名(ファイルパスで使用) | testdb |
例:
mysql -h rm-bpxxxxx.mariadb.rds.aliyuncs.com -P 3306 -u testuser -p test001 < /tmp/testdb.sql
mysql -h rm-bpxxxxx.mariadb.rds.aliyuncs.com -P 3306 -u testuser -p test001 < /tmp/testdb_trigger.sqlステップ 5:移行の検証
リモート接続ツールを更新し、ターゲットデータベース内のテーブルを確認します。テーブルが存在し、かつデータが正しく格納されていれば、移行は完了です。