使用 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

    這個旗標會從資料庫匯出作業中移除 COLUMN_STATISTICS 資料表,避免發生 Unknown table 'COLUMN_STATISTICS' in information_schema (1109) 錯誤。詳情請參閱「診斷問題」。

此外,建議您使用下列旗標:

  • --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

此外,您也應設定 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 bucket,用於儲存 dump 檔案 (例如 replica-bucket)。
[DUMP_FILENAME] 傾印檔案名稱,結尾為 .gz 副檔名 (例如 source-database.sql.gz)。

後續步驟

如需完整的逐步遷移操作說明,請參閱「開始使用 MySQL 適用的 Cloud SQL 遷移功能」。