mysqldump를 사용하여 MySQL 데이터베이스 내보내기

필요한 옵션을 사용하여 MySQL 데이터베이스에 mysqldump 유틸리티를 직접 실행할 수 있습니다. 그러나 Cloud SQL 데이터베이스로 데이터를 가져오기 위해 내보내는 경우 다음 플래그와 함께 mysqldump 유틸리티를 사용합니다.

  • --databases 내보낼 데이터베이스의 명시적 목록을 지정합니다. 이 목록에는 시스템 데이터베이스 (sys, mysql, performance_schema, information_schema)가 포함되어 선택해서는 안 됩니다.
  • --hex-blob 데이터베이스에 바이너리 필드가 포함된 경우 이 플래그를 사용하여 바이너리 필드를 올바르게 가져와야 합니다.
  • --single-transaction 실행하기 전에 트랜잭션을 시작합니다. 전체 데이터베이스를 잠그는 대신 mysqldump가 현재 상태에서 데이터베이스를 읽을 수 있으므로 일관된 데이터 덤프가 가능합니다.
  • --routines 저장 프로시저 및 함수를 포함합니다.
  • mysqldump 버전 8 이상을 사용하여 8 미만의 MySQL 데이터베이스 버전을 내보내는 경우:
    --column-statistics=0

    이 플래그는 Unknown table 'COLUMN_STATISTICS' in information_schema (1109) 오류를 방지하기 위해 데이터베이스 내보내기에서 COLUMN_STATISTICS 테이블을 삭제합니다. 자세한 내용은 문제 진단을 참고하세요.

다음 플래그를 사용하는 것도 좋습니다.

  • --no-autocommit
  • --default-character-set=utf8mb4
  • --master-data

MySQL 서버와 네트워크 연결이 설정된 머신에서 다음 명령어를 실행합니다.

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --master-data=1  \
        --single-transaction \
        --routines \
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

마이그레이션 소스가 MySQL용 관계형 데이터베이스 서비스 (RDS)인 경우:

  • master-data 속성은 지원되지 않습니다.
  • 소스 데이터베이스 서버가 GTID를 지원하는 경우 --set-gtid-purged=on 속성을 사용합니다. 그렇지 않은 경우에는 이 속성을 사용하지 마세요.
  • 수동 덤프를 사용하여 데이터를 이전하는 경우 GTID를 사용 설정한 상태에서 이전을 실행합니다.

이 명령어는 다음 예시처럼 표시될 수 있습니다.

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --set-gtid-purged=on \
        --single-transaction \
        --routines \ 
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

또한 binlog를 더 오래 보존하도록 RDS 인스턴스를 구성해야 합니다. 이 명령어는 다음 예시처럼 표시될 수 있습니다.

    # Sets the retention period to one week.
    call mysql.rds_set_configuration('binlog retention hours', 168);

[PROPERTIES_IN_BRACKETS]를 다음 값으로 바꿉니다.

속성
[SOURCE_ADDR] 소스 데이터베이스 서버의 IPv4 주소 또는 호스트 이름입니다.
[SOURCE_PORT] 소스 데이터베이스 서버의 포트입니다.
[USERNAME] MySQL 사용자 계정입니다.
[DBS] 덤프에 포함할 소스 데이터베이스 서버의 데이터베이스 목록으로 공백으로 구분됩니다. SHOW DATABASES MySQL 명령어를 사용하여 데이터베이스를 나열합니다.
[BUCKET_NAME] 사용자가 만들고 덤프 파일을 저장하는 데 사용하는 Cloud Storage의 버킷입니다 (예: replica-bucket).
[DUMP_FILENAME] 덤프의 파일 이름으로, .gz 파일 확장자로 끝납니다 (예: source-database.sql.gz).