インスタンスの復元

このページでは、バックアップからインスタンスを復元する方法とインスタンスのポイントインタイム リカバリを実行する方法について説明します。

復元オペレーションやポイントインタイムについては、インスタンスの復元の概要をご覧ください。

バックアップからインスタンスを復元する

バックアップを使用して、バックアップの取得元の同じインスタンスを復元するか、バックアップを使用して同じプロジェクト内の別のインスタンスを復元することができます。

同じインスタンスへの復元

バックアップから同じインスタンスに復元すると、そのインスタンス上のデータが、バックアップを作成したときの状態に戻ります。インスタンスの復元については、復元の実行についての全般的なヒントをご覧ください。

Console

  1. Google Cloud Platform Console で Cloud SQL インスタンス ページに移動します。

    Cloud SQL インスタンス ページに移動

  2. ターゲット インスタンスにリードレプリカまたはフェイルオーバー レプリカがある場合は、右端にあるアイコン(その他の操作アイコン)を使用してそれらのレプリカを削除します。
  3. 復元するインスタンスをクリックして、[インスタンスの詳細] ページを開きます。
  4. [バックアップ] タブをクリックします。
  5. 使用するバックアップを探し、[その他の操作] メニュー その他の操作アイコン から [復元] を選択します。
  6. [バックアップからのインスタンスの復元] ダイアログ ボックスで、[OK] をクリックして復元プロセスを開始します。

    デフォルトのターゲット インスタンスは、バックアップの作成元と同じインスタンスです。

    [バックアップの復元] ダイアログ ボックス

  7. インスタンスの [オペレーション] ページに移動すると、復元オペレーションの状態を確認できます。
  8. 復元オペレーションが完了したら、最初の手順で削除したレプリカを再作成します。

    インスタンスが削除されてから最大 1 週間はインスタンス名を再利用することはできません。

gcloud

  1. インスタンスにレプリカがあるかどうかを示します。
    gcloud sql instances describe [INSTANCE_NAME]
    

    replicaNames の下に表示されたインスタンスをメモします。

  2. すべてのレプリカを削除します。
    gcloud sql instances delete [REPLICA_NAME]
    

    すべてのレプリカについて繰り返します。

  3. インスタンスのバックアップの一覧を取得します。
    gcloud sql backups list --instance [INSTANCE_NAME]
    
  4. 使用するバックアップを見つけ、その ID 値を記録します。
    必ず「成功」とマークされたバックアップを選択してください。
  5. 指定したバックアップからインスタンスを復元します。
    gcloud sql backups restore [BACKUP_ID] --restore-instance=[INSTANCE_NAME]
  6. 復元オペレーションが完了したら、最初の手順で削除したレプリカを再作成します。

    インスタンスが削除されてから最大 1 週間はインスタンス名を再利用することはできません。

cURL

  1. インスタンスのすべてのレプリカを一覧表示します。
    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]?fields=replicaNames
    
  2. すべてのレプリカを削除します。
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X DELETE \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[REPLICA_NAME]
    

    各リードレプリカとフェイルオーバー レプリカに対して繰り返します。

  3. インスタンスのバックアップを一覧表示し、使用するバックアップの ID を取得します。
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/backupRuns
    
  4. バックアップからインスタンスを復元します。
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{ "restoreBackupContext": {"backupRunId": "[BACKUP_ID]"}}' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/restoreBackup
    
  5. 復元オペレーションが完了したら、前に削除したレプリカを再作成します。

    インスタンスが削除されてから最大 1 週間はインスタンス名を再利用することはできません。

別のインスタンスへの復元

バックアップから別のインスタンスに復元すると、ターゲット インスタンス上のデータが、バックアップを作成したときのソース インスタンスの状態に更新されます。詳細については、復元の実行についての全般的なヒント別のインスタンスへの復元のヒントと要件をご覧ください。

Console

  1. Google Cloud Platform Console で Cloud SQL インスタンス ページに移動します。

    Cloud SQL インスタンス ページに移動

  2. ターゲット インスタンスにリードレプリカまたはフェイルオーバー レプリカがある場合は、右端にあるアイコン(その他の操作アイコン)を使用してそれらのレプリカを削除します。
  3. ソース インスタンスをクリックして [インスタンスの詳細] ページを開き、[バックアップ] タブを選択します。
  4. 復元するバックアップを探し、[その他の操作] メニュー その他の操作アイコン から [復元] を選択します。
  5. [バックアップからのインスタンスの復元] ダイアログで、[ターゲット インスタンス] を選択して [OK] をクリックします。

    別のターゲットが選択された [バックアップの復元] ダイアログ ボックス。

  6. ターゲット インスタンスの [オペレーション] タブに移動すると、復元の状態を確認できます。
  7. 復元オペレーションが完了したら、前に削除したレプリカを再作成します。

    インスタンスが削除されてから最大 1 週間はインスタンス名を再利用することはできません。

gcloud

  1. ターゲット インスタンスについて記述し、レプリカがあるかどうかを確認します。
    gcloud sql instances describe [TARGET_INSTANCE_NAME]
    

    replicaNames の下に表示されたインスタンスをメモします。

  2. すべてのレプリカを削除します。
    gcloud sql instances delete [REPLICA_NAME]
    

    レプリカごとに繰り返します。

  3. インスタンスのバックアップのリストを取得します。
    gcloud sql backups list --instance [SOURCE_INSTANCE_NAME]
    
  4. 使用するバックアップを見つけ、その ID 値を記録します。
    必ず「成功」とマークされたバックアップを選択してください。
  5. ターゲット インスタンスの指定されたバックアップから復元します。
    gcloud sql backups restore [BACKUP_ID] --restore-instance=[TARGET_INSTANCE_NAME] \
                                              --backup-instance=[SOURCE_INSTANCE_NAME]
        
  6. 復元が完了したら、前に削除したレプリカを再作成します。

    インスタンスが削除されてから最大 1 週間はインスタンス名を再利用することはできません。

cURL

  1. ターゲット インスタンスのすべてのレプリカを一覧表示します。
    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[TARGET_INSTANCE_NAME]?fields=replicaNames
    
  2. すべてのレプリカを削除します。
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X DELETE \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[REPLICA_NAME]
    

    レプリカごとに繰り返します。

  3. ソース インスタンスのバックアップの一覧を表示し、使用するバックアップの ID を取得します。
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[SOURCE_INSTANCE_NAME]/backupRuns
    
  4. バックアップからターゲット インスタンスを復元します。
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{ "restoreBackupContext": {"backupRunId": "[BACKUP_ID]", "instanceId": "[SOURCE_INSTANCE_NAME]"}}' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[TARGET_INSTANCE_NAME]/restoreBackup
    
  5. 復元オペレーションが完了したら、前に削除したレプリカを再作成します。

    インスタンスが削除されてから最大 1 週間はインスタンス名を再利用することはできません。

ポイントインタイム リカバリを実行する

ポイントインタイム リカバリにより、インスタンスを特定のポイントインタイムに復元できます。ポイントインタイム リカバリは、常に新しいインスタンスを作成します。既存のインスタンスには、ポイントインタイムを実行できません。

始める前に

このタスクを行う前に、次のことを確認する必要があります。

  • インスタンスでバイナリログとバックアップが有効になっていて、復元するイベントの前の最後のバックアップ以降、インスタンスでバイナリログが継続されている。

    詳細については、バイナリログを有効にするをご覧ください。

  • バイナリログ ファイル名と復元に使用するイベントの位置(このイベントとその後のすべてのイベントは新しいインスタンスには反映されません)。

    詳細については、バイナリログの位置を識別するをご覧ください。

ポイントインタイム リカバリを実行する

Console

  1. Google Cloud Platform Console で Cloud SQL インスタンス ページに移動します。

    Cloud SQL インスタンス ページに移動

  2. 復元するインスタンスの [その他の操作] メニュー(その他の操作アイコン)を開き、[クローン] を選択します。
  3. [クローンの作成] ウィンドウで、必要に応じて新しいインスタンスの名前を更新します。
  4. [詳細] の下で、[前の位置からクローンを作成] を選択します。
  5. 前に確認したバイナリログの名前を [バイナリログ ファイル名] に入力します。
  6. 復元に使用するイベントの位置を [復元位置] に入力します。
  7. [クローンを作成] をクリックします。

gcloud

  1. 確認したバイナリログ ファイル名と復元位置を使用して新しいインスタンスを作成します。
    gcloud sql instances clone [SOURCE_INSTANCE_NAME] [NEW_INSTANCE_NAME] \
           --bin-log-file-name=[BINLOG_FILE_NAME] --bin-log-position=[POSITION]
    

    復元コマンドは、次の例のようになります。

    gcloud sql instances clone instance1 instance1-clone \
           --bin-log-file-name=mysql-bin.0000031 --bin-log-position=107
    
  2. クローン コマンドから返されたオペレーション ID を使用して復元オペレーションの状態を確認します。
    gcloud sql operations describe [OPERATION_ID]
    オペレーションが進行中の場合は、状態として RUNNING が返されます。オペレーションが完了すると、状態として DONE が返されます。

ポイントインタイム リカバリの詳細については、MySQL リファレンスのバイナリログを使用したポイントインタイム リカバリをご覧ください。

cURL

確認したバイナリログ ファイル名と復元位置を使用して新しいインスタンスを作成します。

ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{"cloneContext": {"kind": "sql#cloneContext",
              "destinationInstanceName": "[TARGET_INSTANCE_NAME]",
              "binLogCoordinates": {"kind": "sql#binLogCoordinates",
                                    "binLogFileName": "[BINLOG_FILE_NAME]",
                                    "binLogPosition": "[POSITION]" }}}' \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[SOURCE_INSTANCE_NAME]/clone \
     -X POST

リカバリ位置を確認する

ポイントインタイム リカバリを実行するには、事前にバイナリログ ファイル名とインスタンスを復元するポイントインタイムに対応する位置を確認する必要があります。

このタスクには MySQL クライアントを使用します。

  1. MySQL クライアントで復元するインスタンスに接続します。

    接続は Cloud Shell を使用するか、ローカルのクライアント マシンから行うことができます。詳細については、外部アプリケーションのための接続オプションをご覧ください。

  2. インスタンスのバイナリ ログファイルを表示します。

    SHOW BINARY LOGS;
    
  3. 最新のログファイルの最初のイベント 100 件を表示します。

    SHOW BINLOG EVENTS IN '<BINARY_LOG_FILE>' LIMIT 100;
    

    表示する行の数は調整できますが、ファイルの大きさがわかるまでは、すべてのイベントを表示しないようにしてください。多数のイベントを表示すると、システムのパフォーマンスに影響する可能性があります。

  4. 探しているイベントが表示されない場合は、表示されている最後の位置を使用して、次のイベントのセットを表示します。

    SHOW BINLOG EVENTS IN '<BINARY_LOG_FILE>' FROM <POSITION> LIMIT 100;
    
  5. 復元に使用するポイントインタイムをマークするイベントが見つかったら、位置(Pos として表示されます)とログファイル名を記録します。

    ログファイル名と位置は、ポイントインタイム リカバリで使用する値です。

次に SHOW BINLOG EVENTS コマンドの出力例を示します。

+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                                |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+
| mysql-bin.000011 |   4 | Format_desc |  88955285 |         120 | Server ver: 5.6.30-log, Binlog ver: 4               |
| mysql-bin.000011 | 120 | Query       |  88955285 |         211 | create database db1                                 |
| mysql-bin.000011 | 211 | Query       |  88955285 |         310 | use `db1`; CREATE TABLE t (c CHAR(20))              |
| mysql-bin.000011 | 310 | Query       |  88955285 |         381 | BEGIN                                               |
| mysql-bin.000011 | 381 | Table_map   |  88955285 |         426 | table_id: 18 (db1.t)                                |
| mysql-bin.000011 | 310 | Query       |  88955285 |         381 | BEGIN                                               |
| mysql-bin.000011 | 426 | Write_rows  |  88955285 |         464 | table_id: 18 flags: STMT_END_F                      |
| mysql-bin.000011 | 464 | Xid         |  88955285 |         495 | COMMIT /* xid=56 */                                 |
| mysql-bin.000011 | 495 | Query       |  88955285 |         566 | BEGIN                                               |
| mysql-bin.000011 | 566 | Table_map   |  88955285 |         611 | table_id: 18 (db1.t)                                |
| mysql-bin.000011 | 611 | Write_rows  |  88955285 |         649 | table_id: 18 flags: STMT_END_F                      |
| mysql-bin.000011 | 649 | Xid         |  88955285 |         680 | COMMIT /* xid=57 */                                 |
| mysql-bin.000011 | 680 | Query       |  88955285 |         751 | BEGIN                                               |
| mysql-bin.000011 | 751 | Table_map   |  88955285 |         796 | table_id: 18 (db1.t)                                |
| mysql-bin.000011 | 796 | Write_rows  |  88955285 |         834 | table_id: 18 flags: STMT_END_F                      |
| mysql-bin.000011 | 834 | Xid         |  88955285 |         865 | COMMIT /* xid=58 */                                 |
| mysql-bin.000011 | 865 | Query       |  88955285 |         977 | use `db1`; DROP TABLE `t` /* generated by server */ |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+
16 rows in set (0.04 sec)

上記の太字の DROP TABLE ステートメントまで復元するには、リカバリ位置として「mysql-bin.000011」の「865」を使用します。DROP TABLE ステートメントとそれ以降のすべてのオペレーションは、新しいインスタンスには反映されません。

バイナリログを有効にする

Console

  1. Google Cloud Platform Console で Cloud SQL インスタンス ページに移動します。

    Cloud SQL インスタンス ページに移動

  2. バイナリログを有効にするインスタンスを選択します。
  3. [編集] をクリックします。
  4. [バックアップとバイナリログ] セクションで、必要に応じて [自動バックアップを有効にする] をオンにし、[バイナリ ロギングを有効にする] をオンにします。

    バイナリログを有効にするには、自動バックアップを有効にする必要があります。

  5. [保存] をクリックします。
  6. インスタンスの [インスタンスの詳細] ページで、[バイナリログ] が [有効] になります。

gcloud

  1. インスタンスの詳細を表示します。
    gcloud sql instances describe [INSTANCE_NAME]
    
  2. backupConfiguration の下に enabled: false と表示されている場合は、スケジュールされたバックアップを有効にします。
    gcloud sql instances patch [INSTANCE_NAME] --backup-start-time [HH:MM]
    

    「バックアップ開始時間」のパラメータは、UTC±00 タイムゾーンの 24 時間形式で指定されます。

  3. バイナリログを有効にします。
    gcloud sql instances patch [INSTANCE_NAME] --enable-bin-log
    
  4. 変更を確定します。
    gcloud sql instances describe [INSTANCE_NAME]
    

    backupConfiguration の下で binaryLogEnabled: true を探します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...