PolarDB のバックアップダウンロード機能を使用して、ディスクベースのインスタンスからスナップショットバックアップを CSV または SQL ファイルとしてエクスポートします。その後、そのファイルを使用して、自己管理 MySQL データベースにデータを復元できます。
このチュートリアルは参考用です。Python 復元スクリプトはメンテナンスされなくなりました。使用する前にスクリプトを評価してください。
前提条件
PolarDB for MySQL クラスターの要件
復元を成功させるには、開始する前に、自己管理データベースとターゲットの PolarDB for MySQL クラスターが同じバージョンであることを確認してください。
クラスターのリージョン要件:
自己管理 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 進数形式で保存されます。データをインポートすると、MySQL はこれらのバイナリフィールドを文字列として処理します。この場合、
load data local infileコマンドで UNHEX 関数を手動で使用して、16 進数の値を元のバイナリ文字列に変換する必要があります。次の空間データ型のフィールドはサポートされていません: GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、または GEOMETRYCOLLECTION。
使用上の注意
PolarDB for MySQL クラスターと自己管理 MySQL データベースが同じバージョンを使用していることを確認してください。データベースのバージョンが異なると、互換性のない機能が原因で復元が失敗する可能性があります。
復元コマンドを実行する前に、ターゲットデータベースにバックアップデータ内のデータベースやテーブルと同じ名前のものがないことを確認し、データの競合や損失を防いでください。競合するデータベースとテーブルを注意深く確認し、削除してください。
何らかの理由で復元ジョブを中断した場合、データが不完全になったり、ジョブが失敗したりする可能性があります。注意して進めてください。
手順
この例では、PolarDB for MySQL クラスターの SQL ファイルから自己管理 MySQL データベースにデータを復元する方法を示します。この例では、自己管理データベースは 64 ビット CentOS 7.8 を使用する ECS インスタンス上で実行されます。コマンドは、お使いの環境によって異なる場合があります。
PolarDB コンソールにログインします。バックアップファイルのダウンロード機能を使用して、クラスターのバックアップファイルを CSV または SQL ファイルに変換し、そのファイルをコンピューターまたは ECS インスタンスにダウンロードします。
ダウンロードしたバックアップファイルをコンピューターまたは ECS インスタンスで解凍します。
(オプション) バックアップファイルが指定した場所 (
/home/mysql/data) に解凍されたことを確認します。ls -al /home/mysql/datapython_script.py をコンピューターまたは ECS インスタンスにダウンロードします。
重要このスクリプトは参考用です。お使いの環境や要件に応じてスクリプトを調整する必要がある場合があります。注意して使用してください。
次のコマンドを実行して、
restore_from_downloads.pyPython スクリプトファイルに権限を付与します。chmod +x ./restore_from_downloads.pyCSV または SQL ファイルから自己管理データベースにデータを復元します。復元コマンドは次のとおりです。
python ./restore_from_downloads.py <Path of the CSV or SQL file directory> <Database endpoint> <Database port> <Database account> <Database password>例:
python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********"説明Python スクリプトを実行しているウィンドウを閉じると、スクリプトは停止します。スクリプトをバックグラウンドで実行するには、次のコマンドを使用します。
nohup python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********" > app.log 2>&1 &実行結果:
重要自己管理データベースに、バックアップデータ内のデータベースと同じ名前のデータベースが含まれていないことを確認してください。そうでない場合、復元は失敗します。
データベースアカウント名またはパスワードにシャープ記号 (#) やスペースなどの特殊文字が含まれている場合は、コマンドラインパラメーターとして渡すときにパスワードを二重引用符 ("") で囲みます。たとえば、パスワードが
#1234の場合、コマンドに"#1234"と入力します。Command 'python' not foundのようなエラーメッセージが表示された場合、Python がインストールされていないか、Python コマンドがシステムの検索パスにないことを示します。この場合、システムにインストールされている Python のバージョンを確認し、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 account> -p<Database password> -e<SQL>コマンドを使用するためです。この警告は、システム上の他のユーザーが ps などのコマンドを実行することでパスワードを表示できる可能性があることを示します。この警告は復元操作には影響しません。復元操作が完了したら、自己管理 MySQL データベースにログインしてパスワードを変更してください。Access denied for user 'xxx'@'xxx' (using password: YES)のようなエラーメッセージが表示された場合、データベースアカウントまたはパスワードが正しくないことを示します。正しく入力したことを確認してください。