[PaaS만]{class="badge informative" title="Adobe Commerce 온 클라우드 프로젝트(Adobe 관리 PaaS 인프라) 및 온프레미스 프로젝트에만 적용됩니다."}

Staging 또는 Production에서 DB 스냅숏 복원

이 문서에서는 Cloud Pro 인프라의 Adobe Commerce에서 snapshot 또는 Staging에서 DB Production을(를) 복원하는 방법을 보여 줍니다.

NOTE
이 메서드는 전체 스냅숏​을 복원합니다.
​>부분적으로 스냅숏을 복원해야 하는 경우(예: 주문 테이블은 그대로 두고 카탈로그 테이블만 복원해야 하는 경우) 개발자 또는 DBA와 상담해야 합니다.

영향을 받는 제품 및 버전

사용 사례에 가장 적합한 항목 선택:

NOTE
스냅샷을 통합 환경으로 가져오는 경우 데이터베이스 크기를 고려해야 합니다. 대용량 데이터베이스는 가져오기 후 성능 저하를 초래할 수 있습니다. 먼저 스냅샷을 스테이징 또는 로컬 환경으로 가져와서 통합으로 전송하기 전에 크기를 검토하고 줄이는 것이 좋습니다. 또한 가져오기 후에 성능 문제가 발생하는 경우 통합 분기에 cron 작업을 비활성화하는 것이 좋습니다. 자세한 내용은 Commerce on Cloud Infrastructure 안내서의 통합 환경을 참조하십시오.

방법 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