バックアップのダウンロード機能を使用して、ディスクベースの ApsaraDB RDS for MySQL インスタンスのスナップショットバックアップを CSV または SQL ファイルに変換します。その後、このファイルをローカルマシンまたは ECS インスタンス上の自己管理 MySQL データベースに復元できます。
前提条件
ApsaraDB RDS for MySQL インスタンスが次の要件を満たしていること:
データベースのバージョン: 8.0 または 5.7 (サーバーレスインスタンスをサポート)
ストレージタイプ: ESSD またはパフォーマンス専有型ディスク
ステータス: 実行中
説明この情報は、インスタンスの [基本情報] ページで確認できます。
パフォーマンス専有型ディスクを使用し、データアーカイブ機能が有効になっているインスタンスでは、高度なダウンロード機能はサポートされていません。これらのインスタンスのダウンロードタスクは失敗します。
-
ApsaraDB RDS for MySQL インスタンスで TDE を無効にする必要があります。インスタンスに暗号化されたテーブルが含まれている場合、復元プロセスは失敗します。最初にテーブルを復号する必要があります。
-
ご利用の自己管理 MySQL データベースで
local_infileパラメーターを有効にする必要があります。説明-
local_infileパラメーターのステータスを確認するには (ON は有効であることを示します)、次のコマンドを実行します:SHOW GLOBAL VARIABLES LIKE 'local_infile'; -
local_infileパラメーターを有効にするには、次のコマンドを実行します:SET GLOBAL local_infile=1;
-
制限事項
ダウンロードしたバックアップセットを自己管理 MySQL データベースに復元する場合、データの型には次の制限が適用されます。
-
サポートされていないバイナリフィールドタイプ: BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、および LONGBLOB。
説明-
バックアップセットにこれらのデータの型が含まれている場合、データは 16 進数形式で保存されます。インポート中、MySQL はこれらを文字列として扱います。
load data local infileコマンドで `UNHEX()` 関数を手動で使用して、バイナリ形式に変換し直す必要があります。 -
または、BLOB データの場合は、
mysqldumpを使用して、ローカルの MySQL データベースにデータをバックアップおよび復元することもできます。データのバックアップ:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <self-managed_database_name> --skip-triggers --skip-lock-tables > /tmp/<self-managed_database_name>.sqlデータの復元:
mysql -h 127.0.0.1 -u username -p database_name < backup_file.sql
-
-
サポートされていない空間データ型: GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、および GEOMETRYCOLLECTION。
事前準備
-
スクリプトのメンテナンス: このトピックで提供されている
restore_from_downloads.pyスクリプトは参考用であり、現在はメンテナンスされていません。ご自身の責任において使用し、ご利用の環境との互換性を確認してください。 -
データベースのバージョンの整合性: 自己管理 MySQL データベースのメジャーバージョンが、ApsaraDB RDS for MySQL インスタンスのメジャーバージョンと一致していることを確認してください。バージョンが一致しない場合、機能の非互換性により復元が失敗する可能性があります。
-
命名の競合: ターゲットの自己管理データベースに、バックアップセット内のデータベースやテーブルとの命名の競合がないことを確認してください。命名の競合があると、復元は失敗します。
-
タスクの中断: 復元タスクを中断すると、データが不完全になったり、復元が失敗したりする可能性があります。プロセスが開始された後は中断しないでください。
-
特殊文字の取り扱い: ファイルパス、データベースアカウント、またはパスワードに
&、#、スペースなどの特殊文字が含まれている場合は、値をダブルクォーテーション ("") で囲む必要があります。そうしないと、コマンドは失敗します。例:# ファイルパスに & などの特殊文字が含まれている場合は、パスをダブルクォーテーションで囲みます。 python ./restore_from_downloads.py "/path/to/data&test" 127.0.0.1 3306 root zhtpasswordtest # パスワードに # や @ などの特殊文字が含まれている場合は、パスワードをダブルクォーテーションで囲みます。 python ./restore_from_downloads.py /data 127.0.0.1 3306 root "#Test@20250821"
操作手順
この例では、ディスクベースの ApsaraDB RDS for MySQL インスタンスから SQL ファイルを自己管理 MySQL データベースに復元する方法を説明します。この例の自己管理データベースは、Alibaba Cloud Linux 3.2104 LTS 64 ビットを実行している ECS インスタンス上で動作します。ご利用の環境に合わせてコマンドを調整してください。
-
バックアップファイルのダウンロードと解凍
-
RDS コンソールにログインし、バックアップのダウンロード機能を使用して、ApsaraDB RDS for MySQL のディスクベースのインスタンスからバックアップファイルを CSV または SQL ファイルに変換します。その後、ファイルをローカルマシンまたは ECS インスタンスにダウンロードします。
-
ダウンロードしたバックアップファイルをローカルマシンまたは ECS インスタンスで解凍します。
-
バックアップファイルが
.tar.gz形式の場合は、次のコマンドを実行します:tar -izxvf <compressed_file_name>.tar.gz -C <destination_directory> # 例: backup.tar.gz ファイルを /home/mysql/data ディレクトリに解凍します。コマンド内のファイル名とディレクトリは参考用です。 tar -izxvf backup.tar.gz -C /home/mysql/data -
バックアップファイルが
.tar.zst形式の場合は、次のコマンドを実行します:zstd -d -c <compressed_file_name>.tar.zst | tar -xvf - -C <destination_directory> # 例: backup.zst ファイルを /home/mysql/data ディレクトリに解凍します。コマンド内のファイル名とディレクトリは参考用です。 zstd -d -c backup.tar.zst | tar -xvf - -C /home/mysql/data
-
-
(任意) 次のコマンドを実行して、バックアップファイルが指定した場所 (/home/mysql/data) に解凍されたことを確認します:
ls -al /home/mysql/data
-
-
復元スクリプトの準備
-
復元スクリプトを準備します。
MySQL Python スクリプトファイルをローカルマシンまたは ECS インスタンスにダウンロードします。
重要このスクリプトは参考用です。ご利用の環境に合わせてスクリプトを修正してください。ご自身の責任において使用してください。
-
次のコマンドを実行して、スクリプトに実行権限を付与します:
chmod +x ./<script_name>.py # 例: chmod +x ./restore_from_downloads.py
-
-
復元コマンドの実行
重要Command 'python' not foundなどのエラーメッセージが表示された場合、Python がインストールされていないか、`python` コマンドがシステムの PATH に含まれていません。この場合、インストールされている Python のバージョンを確認し、正しいコマンドを使用してスクリプトを実行してください。たとえば、Python 3 がインストールされている場合は、python3 ./restore_from_downloads.py /home/mysql/data/test1.sql 127.0.0.1 3306 zhtxxxxx "#txxxxx"コマンドを実行します。python ./<script_name>.py <path_to_CSV_or_SQL_directory> <database_host> <database_port> <database_account> <database_password> # 例: python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********"[root@ixxx ~]# python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tesxxx" [INFO]: restore data from /home/mysql/data to 127.xxx:3306 mysql: [Warning] Using a password on the command line interface can be insecure. [INFO]: restore structure database: zhxxx ends mysql: [Warning] Using a password on the command line interface can be insecure. [INFO]: restore structure table: zhxxx ends [INFO]: trying to exec: mysql -h127.xxx -P3306 -uroot -p#Tesxxx </home/mysql/data/zxxx mysql: [Warning] Using a password on the command line interface can be insecure. [INFO]: restore data [1/1] of table zhxxx.zhxxx
参考資料
-
このソリューションは、ディスクベースのインスタンスからのスナップショットバックアップの復元にのみ適用されます。パフォーマンス専有型ローカルディスクを持つインスタンスからバックアップを復元する必要がある場合は、「ApsaraDB RDS for MySQL の物理バックアップファイルの自己管理データベースへの復元」または「ApsaraDB RDS for MySQL の論理バックアップファイルの自己管理データベースへの復元」をご参照ください。
-
Alibaba Cloud は、ApsaraDB RDS for MySQL インスタンスから自己管理 MySQL データベースへのデータ移行を支援する Data Transmission Service (DTS) も提供しています。
-
その他のデータ復元ソリューションについては、「データ復元ソリューションの概要」をご参照ください。