[PaaS のみ]{class="badge informative" title="Adobe Commerce on Cloud プロジェクト(Adobeが管理する PaaS インフラストラクチャ)およびオンプレミスプロジェクトにのみ適用されます。"}

Staging または Production から DB スナップショットをリストアする

この記事では、Cloud Pro インフラストラクチャ上のAdobe Commerceで snapshot または Staging から DB Production を復元する方法について説明します。

NOTE
これらの方法では、完全なスナップショット が復元されます。
​>スナップショットを 部分的に リストアする必要がある場合(たとえば、順序テーブルはそのままにしてカタログテーブルだけをリストアする場合)、開発者または DBA に相談する必要があります。

影響を受ける製品とバージョン

お客様の状況に最も適したものを選択してください。

NOTE
スナップショットを統合環境にインポートする場合は、データベースのサイズに注意してください。 データベースが大きいと、インポート後にパフォーマンスが低下する場合があります。 最初にスナップショットをステージング環境またはローカル環境にインポートして、確認しサイズを小さくしてから統合に転送することをお勧めします。 さらに、インポート後にパフォーマンスの問題が発生した場合は、統合ブランチで cron ジョブを無効にすることを検討します。 詳しくは、『クラウドインフラストラクチャー上のCommerce』ガイドの ​ 統合環境 ​ を参照してください。

方法 1: データベース dump をローカル マシンに転送し、インポートする meth2

NOTE
Azure プロジェクト のスナップショットの形式は異なり、他のデータベース インポートできません が含まれています。
スナップショットを読み込む前に、ダンプの読み込みを続行する前に、追加の手順を実行して 適切なデータベースを抽出 する必要があります。

手順は次のとおりです。

  1. SFTP を使用して、データベース snapshot が配置されている場所(通常は cluster の最初のサーバー/ノード)に移動します(例:/mnt/recovery-<recovery_id>)。

    Azure ベースのプロジェクト:
    プロジェクトが Azure ベースの場合(つまり、プロジェクト URL が https://us-a1.magento.cloud/projects/<cluster_id> のような場合)、スナップショットは次の場所に配置されます。

    • /mnt/shared/<cluster ID>/all-databases.sql.gz
    • /mnt/shared/<cluster ID_stg>/all-databases.sql.gz

    Azure 固有の抽出手順

    実稼動の場合:

    code language-bash
    cd /mnt/shared/<cluster ID>/
    gunzip all-databases.sql.gz
    head -n 17 all-databases.sql > <cluster ID>.sql
    sed -n '/^-- Current Database: `<cluster ID>`/,/^-- Current Database: `/p' all-databases.sql >> <cluster ID>.sql gzip <cluster ID>.sql
    zcat <cluster ID>.sql.gz | \
    sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | \
    mysql -h 127.0.0.1 \
    -u $DB_USER \
    --password=$MYSQL_PWD $DB_NAME \
    --init-command="SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT ;SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS ;SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION ;SET NAMES utf8 ;SET @OLD_TIME_ZONE=@@TIME_ZONE ;SET TIME_ZONE='+00:00' ;SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 ;SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 ;SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' ;SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0;"
    

    ステージング用:

    code language-bash
    cd /mnt/shared/<cluster ID_stg>/
    gunzip all-databases.sql.gz
    head -n 17 all-databases.sql > <cluster ID_stg>.sql
    sed -n '/^-- Current Database: `<cluster ID_stg>`/,/^-- Current Database: `/p' all-databases.sql >> <cluster ID_stg>.sql
    gzip <cluster ID_stg>.sql
    zcat <cluster ID_stg>.sql.gz | \
    sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | \
    mysql -h 127.0.0.1 \
    -u $DB_USER \
    --password=$MYSQL_PWD $DB_NAME \
    --init-command="SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT ;SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS ;SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION ;SET NAMES utf8 ;SET @OLD_TIME_ZONE=@@TIME_ZONE ;SET TIME_ZONE='+00:00' ;SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 ;SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 ;SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' ;SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0;"
    
  2. データベース dump file (例:<cluster ID>.sql.gz の場合は Production、<cluster ID_stg>.sql.gz の場合は Staging)をローカルコンピューターにコピーします。

  3. 開発者向けドキュメントで、データベースにリモートで接続する SSH tunnel を SSH および sFTP: SSH tunneling のように設定していることを確認します。

  4. データベースに接続します。

    code language-bash
    mysql -h <db-host> -P <db-port> -p -u <db-user> <db-name>
    
  5. データベース Drop、MariaDB のプロンプトに対して、次のように入力します。

    (Production 用)

    code language-bash
    drop database <cluster ID>;
    

    (Staging 用)

    code language-bash
    drop database <cluster ID_stg>;
    
  6. 次のコマンドを入力して snapshot を読み込みます。

    (Production 用)

    code language-bash
    zcat <cluster ID>.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -h 127.0.0.1 -P <db-port> -p -u   <db-user> <db-name>
    

    (Staging 用)

    code language-bash
    zcat <cluster ID_stg>.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -h 127.0.0.1 -P <db-port> -p -u   <db-user> <db-name>
    

方法 2:サーバーからデータベース dump を直接インポートする meth3

手順は次のとおりです。

  1. データベース snapshot が配置されている場所に移動します。通常は cluster の最初のサーバー/ノードに移動します(例:/mnt/recovery-<recovery_id>)。

  2. クラウドデータベースを drop 成して再作成するには、まずデータベースに接続します。

    code language-bash
    mysql -h 127.0.0.1 -P <db-port> -p -u <db-user> <db-name>
    
  3. データベース Drop、MariaDB のプロンプトに対して、次のように入力します。

    (Production 用)

    code language-bash
    drop database <cluster ID>;
    

    (Staging 用)

    code language-bash
    drop database <cluster ID_stg>;
    
  4. データベースを削除した後、データベースを再作成します。

    code language-bash
    create database [database_name];
    
  5. 次のコマンドを入力して snapshot を読み込みます。

    (Production からデータベース バックアップをインポートする場合)

    code language-bash
    zcat <cluster ID>.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -h 127.0.0.1 -p -u <db-user> <db-name>
    

    (Staging からデータベース バックアップをインポートする場合)

    code language-bash
    zcat <cluster ID_stg>.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -h 127.0.0.1 -p -u <db-user> <db-name>
    

    (他の環境からデータベースバックアップを読み込む場合)

    code language-bash
    zcat <database-backup-name>.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -h 127.0.0.1 -p -u <db-user> <db-name>
    

    (他の環境からデータベースバックアップを読み込む場合)

    code language-bash
    zcat <database-backup-name>.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -h 127.0.0.1 -p -u <db-user> <db-name>
    

関連資料

開発者向けドキュメントでは、

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a