Engine Yard Developer Center

データベースの復元と読み込み

このドキュメントは英語版のドキュメントを日本語に翻訳したものです。原文に修正があった場合は随時反映致しますが、翻訳作業が完了するまでは英語版が最新の可能性がございます。


更新日: 2012 年 8 月 16 日

データベースの復元または読み込みに関するいくつかのシナリオを以下に示します。

  • シナリオ 1: データベースが壊れています。最近のバックアップを利用して復元する必要があります。

  • シナリオ 2: 既存のデータベースを新しい環境へ移動する必要があります。たとえば、次のような場合です。

    • PostgreSQL 9.0 環境から PostgreSQL 9.1 環境にデータベースのバージョンをアップグレードする場合
    • 異なる非本番環境でのストレス テスト用に運用データベースのコピーが必要な場合
    • アプリケーションとデータベースを別のプロバイダーから Engine Yard Cloud へ移動する場合

データベースの復元 (シナリオ 1)

このシナリオでは、マスター データベース インスタンスにログインしている状態で、このインスタンス上でバックアップの 1 つを使用して既存のデータベースを上書きします。このインスタンス上でバックアップの 1 つを使用して既存のデータベースを上書きするには、eybackup を使用します。

MySQL: データベースを復元する方法 (eybackup による方法)

  1. SSH 経由で、アプリケーションおよびデータベース インスタンス (単一サーバー環境用)、またはマスター データベース インスタンス (クラスター環境用) に接続します。

  2. 以下を入力して、バックアップを一覧表示します。

    sudo -i eybackup -e mysql --list-backup myapp 
    または
     sudo -i eybackup -e mysql -l myapp 
  3. 以下を入力して、バックアップを復元します。

    重要: このコマンドを入力すると、バックアップを使用して現在のデータベースが上書きされます。(現在のバックアップのコピーを保持する必要がある場合は、復元前にオンデマンド バックアップを作成してください。)

     sudo -i eybackup -e mysql --restore N:myapp 
    または
     sudo -i eybackup -e mysql -r N:myapp 

    ここで、
    N は現在のデータベースを上書きするバックアップの番号です。たとえば、10 番目のバックアップを復元するには、次のように入力します。sudo -i eybackup -e mysql -d 10:myapp

PostgreSQL: データベースを復元する方法 (eybackup による方法)

PostgreSQL では、アクティブな接続がある場合にデータベースをドロップすることはできません。そのため、データベースの復元前にアプリケーションを停止する必要が生じる場合があります (手順 3)。

  1. SSH 経由で、アプリケーションおよびデータベース インスタンス (単一サーバー環境用)、またはマスター データベース インスタンス (クラスター環境用) に接続します。

  2. 以下を入力して、バックアップを一覧表示します。

     sudo -i eybackup -e postgresql --list-backup myapp 
    または
     sudo -i eybackup -e postgresql -l myapp 
  3. ターゲット データベースへのアクティブな接続を停止します。

    a. アクティブな接続の数を確認します。

    psql -U postgres -t -c "select count(*) from pg_stat_activity where datname='myapp'" 

    b. アクティブな接続がある場合は、アプリケーションを停止してデータベースからログアウトし、接続を切断します。

  4. 以下を入力して、バックアップを復元します。

    重要: このコマンドを入力すると、バックアップを使用して現在のデータベースが上書きされます。(現在のバックアップのコピーを保持する必要がある場合は、復元前にオンデマンド バックアップを作成してください。)

     sudo -i eybackup -e postgresql --restore N:myapp 
    または
    sudo -i eybackup -e postgresql -r N:myapp 

    (ここで、N は現在のデータベースを上書きするバックアップの番号です。たとえば、10 番目のバックアップを復元するには、次のように入力します。sudo -i eybackup -e postgresql -d 10:myapp

データベースの読み込み (シナリオ 2)

このシナリオでは、データを 1 つの環境 (またはインスタンス) から別の環境へ移動します。データベースのバックアップ ファイルを新しいデータベース インスタンスにコピーします。次に、ネイティブの MySQL コマンドを使用するか、または PostgreSQL 用に Engine Yard 提供のスクリプトを使用して、データベースのバックアップ ファイルを読み込みます。

MySQL: データベースを読み込む方法

  1. 読み込み対象のデータベース インスタンスにデータベースのバックアップ ファイルをコピーします。

    scp [database file] [username]@[database host]:[target directory]/[filename] 

    ここで、
    [database file] はデータベース バックアップ ファイルの名前です。
    [username] はデータベース インスタンスのユーザーです。(Engine Yard Cloud データベースの既定ユーザーは deploy です。)
    [database host] はデータベース インスタンスのホスト名です。
    [target directory] はバックアップ ファイルのコピー先のディレクトリです。
    [filename] は新しい場所でのファイル名です。

    たとえば、以下のようにします。

     scp myapp.2011-11-14T16-47-02.sql.gz deploy@ec2-174-129-17-196.compute-1.amazonaws.com:/tmp/mysql/dumpfile.sql
  2. SSH 経由で、アプリケーションおよびデータベース インスタンス (単一サーバー環境用)、またはマスター データベース インスタンス (クラスター環境用) に接続し、手順 1 でデータベースのバックアップ ファイルをコピーしたディレクトリに移動します (例: cd /tmp/mysql)。

  3. データベースのバックアップ ファイルをデータベースにインポートします。

     gunzip < [filename] | mysql -u [username] -p -h [database host] [app_name] 

    ここで、
    [username] はデータベース インスタンスのユーザーです。Engine Yard Cloud データベースの既定ユーザーは deploy です。
    [database host] はデータベース インスタンスのホスト名です。単一サーバー環境では、データベースのホスト名に「localhost」を入力できます。
    [app_name] はデータベースの名前です。
    [filename] はデータベース バックアップ ファイルの名前です。

    たとえば、以下のようにします。

     gunzip < myapp.2011-11-14T16-47-02.sql.gz | mysql -u deploy -p -h ec2-174-129-17-196.compute-1.amazonaws.com myapp 

PostgreSQL: データベースを読み込む方法

  1. 読み込み対象のデータベース インスタンスにデータベースのバックアップ ファイルをコピーします。

     scp [database file] [username]@[database host]:[target directory]/[filename] 

    ここで、
    [database file] はデータベース バックアップ ファイルの名前です。
    [username] はデータベース インスタンスのユーザーです。(Engine Yard Cloud データベースの既定ユーザーは deploy です。)[database host] は、データベース インスタンスのホスト名です。
    [target directory] はバックアップ ファイルのコピー先のディレクトリです。
    [filename] は新しい場所でのファイル名です。

    たとえば、以下のようにします。

     scp myapp.2011-11-18T12-20-03.pgz deploy@ec2-172-16-139-19.us-west-1.compute.amazonaws.com:/tmp/postgres/dumpfile.pgz 
  2. SSH 経由で、アプリケーションおよびデータベース インスタンス (単一サーバー環境用)、またはマスター データベース インスタンス (クラスター環境用) に接続し、手順 1 でデータベースのバックアップ ファイルをコピーしたディレクトリに移動します (例: cd /tmp/postgres)。

  3. データベースが Engine Yard 環境からのものである場合、データベース バックアップ ファイルを以下のコマンドを使用してデータベースにインポートします。

     pg_restore -d [app_name] [filename] --clean -U postgres 

    ここで、
    [app_name] はデータベースの名前です。
    [filename] はデータベース バックアップ ファイルの名前です。
    --clean はバックアップ ファイルで既存のデータベースを上書きすることを許可します。
    -U postgres はこのユーザーを、データベース上書き権限を持つ postgreSQL ユーザーに設定します。(デプロイ ユーザーにはこのような権限がありません。)

    たとえば、以下のようにします。

     pg_restore -d myapp dumpfile.pgz --clean -U postgres 
  4. データベースが Engine Yard 環境以外からのものである場合は、Engine Yard がこのインスタンスで提供するスクリプト (load_foreign_postgres_db.sh) を使用して、データベース バックアップ ファイルをこのデータベースにインポートします。このスクリプトは pg_dump を使用して作成されたダンプ、つまり標準 SQL テキスト ダンプ (圧縮ファイルの場合は、まず圧縮解除を行ってください) と pg_dump カスタム形式を使用して作成されたダンプの両方で動作します。

    警告: このスクリプトでは [app_name] というデータベースの削除と再作成が行われます。スクリプトでは、デプロイ ユーザーに対して、復元されたデータベースにおける非システムのすべてのテーブル、ビュー、シーケンス、および機能の所有権を割り当てます。ターゲット データベースに失いたくないデータがある場合、または復元をさらにカスタマイズする必要がある場合は、Engine Yard サポートにチケットを送信してください。

    sudo /engineyard/bin/load_foreign_postgres_db.sh [filename] [app_name]

    ここで、
    [app_name] はデータベースの名前です。
    [filename] はデータベース バックアップ ファイルの名前です。

    たとえば、以下のようにします。

    sudo /engineyard/bin/load_foreign_postgres_db.sh dumpfile.pgz myapp

詳細情報

詳細情報参照
バックアップ ファイルのダウンロード方法 View and download database backups (データベースのバックアップの表示とダウンロード)
データベースのオンデマンド バックアップ Back up the database (データベースのバックアップ)
SSH 経由でのインスタンスへの接続 Connect to your instance via SSH (SSH 経由でのインスタンスへの接続)
データベースのパスワードの検索 Find key information about your database (データベースの重要情報の検索)
Engine Yard 以外のソースからの PostgreSQL データベースのインポートについて                               About importing a database from Engine Yard versus from another source (Engine Yard とそれ以外のソースからのデータベース インポートの比較について)

このページに関してフィードバックやご質問がございましたら、以下にコメントを入力してください。サポートが必要な場合は、Engine Yard サポートにチケットを送信してください。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください

コメント

ログインしてコメントを残してください。

Powered by Zendesk