PolarDB for MySQL では、クラウドディスクベースクラスターからスナップショットバックアップを CSV ファイルまたは SQL ファイルとしてエクスポートできます。このファイルを使用して、セルフマネージド MySQL データベースにデータを復元できます。
Python 復元スクリプトは現在メンテナンスされていません。使用する前にスクリプトを評価してください。
前提条件
PolarDB for MySQL クラスター要件
復元を成功させるには、セルフマネージドデータベースのバージョンがソース PolarDB for MySQL クラスターのバージョンと一致している必要があります。
クラスターは以下の要件を満たす必要があります。
-
クラスター: この機能は、エンタープライズ版クラスターの Cluster Edition でのみ利用可能です。
-
リージョン:中国 (成都) 、中国 (広州) 、中国 (青島) 、中国 (北京) 、中国 (上海) 、中国 (張家口) 、中国 (杭州) 、中国 (深セン) 、香港 (中国) 、マレーシア (クアラルンプール) 、インドネシア (ジャカルタ) 、日本 (東京) 、シンガポール、米国 (シリコンバレー) 、米国 (バージニア) 、ドイツ (フランクフルト) 。
説明この機能は近日中に他のリージョンでも利用可能になります。
-
その他:
-
RAM ユーザーはバックアップファイルをダウンロードする権限を持っている必要があります。RAM ユーザーに権限を付与するには、RAM ユーザー権限をご参照ください。
-
バックアップデータは暗号化されていません。暗号化された PolarDB クラスターからバックアップファイルをダウンロードすることはできません。
-
クラスターまたはインスタンスごとに、一度に 1 つのダウンロードタスク (実行中または失敗したもの) のみが許可されます。
-
セルフマネージド MySQL データベース要件
セルフマネージド 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進数形式で保存されます。そのため、
load data local infileコマンド内でUNHEX関数を手動で使用し、16進数値を元のバイナリ形式に戻す必要があります。 -
以下の空間フィールドタイプはサポートされていません: GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION。
使用上の注意
-
PolarDB for MySQL クラスターとセルフマネージド MySQL データベースには、同じデータベースバージョンを使用してください。異なるバージョン間の非互換性により、復元操作が失敗する可能性があります。
-
復元コマンドを実行する前に、ターゲットデータベースにバックアップデータと同じ名前のデータベースまたはテーブルが含まれていないことを確認してください。これにより、データの競合や潜在的なデータ損失を防ぎます。競合するデータベースまたはテーブルは事前に削除してください。
-
復元タスクを中断すると、データが不完全になったり、タスクが失敗したりする可能性があります。
手順
この例では、PolarDB for MySQL クラスターの SQL バックアップファイルから、ECS インスタンス (CentOS 7.8 64 ビット) 上のセルフマネージド MySQL データベースへデータを復元する方法を示します。お使いの環境に合わせてコマンドを調整してください。
-
PolarDB コンソールで、バックアップファイルのダウンロード機能を使用して、クラスターのバックアップファイルを CSV 形式または SQL 形式に変換します。次に、ファイルをローカルマシンまたは 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 -
Python スクリプトをローカルマシンまたは ECS インスタンスにダウンロードします。
重要このスクリプトは参考用であり、お使いの環境に合わせて変更が必要な場合があります。慎重に使用してください。
-
次のコマンドを実行して、
restore_from_downloads.pyスクリプトを実行可能にします:chmod +x ./restore_from_downloads.py -
CSV ファイルまたは SQL ファイルからセルフマネージドデータベースにデータを復元します。
python ./restore_from_downloads.py <path_to_csv_or_sql_directory> <database_endpoint> <database_port> <database_username> <database_password>例:
python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********"説明ターミナルウィンドウを閉じると、スクリプトの実行が停止します。スクリプトをバックグラウンドで実行するには、以下のコマンドを使用してください。
nohup python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********" > app.log 2>&1 &出力:
[root@ixxx ~]# python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********" [INFO]: restore data from /home/mysql/data to 127.0.0.1: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.0.0.1 -P3306 -uroot -p#Tes******** </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重要-
セルフマネージドデータベースに、バックアップ内のデータベースと同じ名前のデータベースが含まれていないことを確認してください。含まれていると、復元操作は失敗します。
-
データベースのユーザー名またはパスワードに、番号記号 (#) やスペースなどの特殊文字が含まれている場合、その値をコマンドラインパラメーターとして渡す際は、二重引用符 ("") で囲む必要があります。 たとえば、データベースのパスワードが
#1234の場合、コマンドラインで"#1234"を渡す必要があります。 -
Command 'python' not foundのようなエラーが表示された場合、Python がインストールされていないか、システムの PATH に含まれていないことを意味します。 Python のインストール状況と、実行に使用するコマンドを確認してください。 たとえば、Python 3 がインストールされている場合は、python3 ./restore_from_downloads.py /home/mysql/data/test1.sql 127.0.0.1 3306 zhtxxxxx "#txxxxx"を使用できます。 -
Python スクリプトの実行時に警告メッセージ
[Warning] Using a password on the command line interface can be insecureが表示されるのは、スクリプトでmysql -h<database endpoint> -P<database port> -u<database username> -p<database password> -e<SQL>コマンドが使用されているためです。この方法は、システムの他のユーザーが ps などのコマンドを実行してパスワードを表示できるため、安全ではありません。この警告は、リカバリ操作には影響しません。リカバリが完了したら、自己管理型 MySQL データベースにログインして、アカウントのパスワードを変更できます。 -
Access denied for user 'xxx'@'xxx' (using password: YES)のようなエラーは、データベースのユーザー名またはパスワードが正しくないことを示します。認証情報が正しく入力されていることを確認してください。
-