使用傾印檔案來設定從外部資料庫的複製作業

本頁面說明在您從外部伺服器建立傾印檔案時,設定複製作業的程序。

請務必完成本頁所有步驟。完成後,您可以以與其他 Cloud SQL 執行個體相同的方式,管理及監控來源呈現方式執行個體。

事前準備

開始前,您應已設定外部伺服器、建立來源呈現方式執行個體,並設定 Cloud SQL 備用資源

更新複製使用者的權限

外部伺服器上的複製使用者帳戶已設定為接受來自任何主機的連線 (%)。您應更新這個使用者帳戶,讓該帳戶只能與 Cloud SQL 備用資源搭配使用。在外部伺服器上開啟終端機,然後輸入下列指令:

mysql 用戶端

    UPDATE mysql.user
      SET Host='NEW_HOST'
      WHERE Host='OLD_HOST'
      AND User='USERNAME';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'GCP_USERNAME'@'HOST';
    FLUSH PRIVILEGES;

範例

    UPDATE mysql.user
      SET Host='192.0.2.0'
      WHERE Host='%'
      AND User='replicationUser';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'gcp_user'@'gmail.com';
    FLUSH PRIVILEGES;
屬性 說明
NEW_HOST 指定 Cloud SQL 備用資源的傳出 IP
OLD_HOST 指派給 Host 的目前值,您可以藉此變更該值。
USERNAME 外部伺服器上的複製使用者帳戶。
GCP_USERNAME Google Cloud Platform (GCP) 使用者帳戶的使用者名稱。
HOST Google Cloud Platform (GCP) 使用者帳戶的主機名稱。

確認複製設定

設定完成後,請確認 Cloud SQL 備用資源可以從外部伺服器複製資料。

首先,請確認外部同步處理設定正確無誤。如要確認這一點,請使用下列指令:

  • Cloud SQL 備援機制與外部伺服器之間的連線
  • 複製使用者權限
  • 版本相容性
  • Cloud SQL 備用資源尚未複製
  • 外部伺服器已啟用二進位檔記錄
  • 已啟用通用交易 ID (GTID)

開啟終端機並輸入下列指令,確認外部同步設定是否正確:

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/verifyExternalSyncSettings

範例

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
屬性 說明
SYNC_MODE verifyExternalSyncSettings 會驗證您是否可以在設定複製作業後,讓 Cloud SQL 備用資源和外部伺服器保持同步。同步處理模式包括 EXTERNAL_SYNC_MODE_UNSPECIFIEDONLINEOFFLINE
SKIP_VERIFICATION 在同步處理資料前,是否要略過內建的驗證步驟。建議您在驗證複製設定後再使用。
PROJECT_ID Google Cloud中的專案 ID。
REPLICA_INSTANCE Cloud SQL 備援資料庫的 ID。

將資料庫匯出至 Cloud Storage 值區

您可以使用位於 Cloud Storage 值區中的 mysqldump 檔案,填入 Cloud SQL 複本。適用條件如下:

  • 您必須使用 MySQL 隨附的 mysqldump 公用程式。
  • mysqldump 執行時,請勿在外部伺服器上執行任何 DDL 作業。否則可能會導致匯出檔案中有資料不一致的情況發生。

如要將資料庫匯出至 Cloud Storage 值區,請按照下列步驟操作:

  1. 在 Google Cloud中建立 Cloud Storage 值區
  2. 使用可連線至外部資料庫伺服器的用戶端開啟終端機,然後執行下列指令。

mysqldump

    mysqldump \
        --host=EXTERNAL_HOST \
        --port=EXTERNAL_PORT \
        --user=USERNAME\
        --password=PASSWORD \
        --databases=DATABASE_LIST  \
        --hex-blob \
        SOURCE_DATA  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --set-gtid-purged=on \
        ADD_DROP_TABLE \
        ROUTINES \
        COMPRESS \
        GZIP \
        | gcloud storage cp - gs://BUCKET/DUMP_FILENAME

範例

    mysqldump \
        --host=192.0.2.1 \
        --port=3306 \
        --user=replicationUser \
        --password \
        --databases guestbook journal \
        --hex-blob \
        --master-data=1 \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --compress \
        | gzip \
        | gcloud storage cp - gs://replica-bucket/external-database.sql.gz
屬性 說明
EXTERNAL_HOST 外部伺服器的 IPv4 或 DNS 位址。
EXTERNAL_PORT 外部伺服器的通訊埠。如果外部伺服器託管在 Cloud SQL 上,則為 3306
USERNAME 外部伺服器上具有資料庫讀取權限的複製使用者帳戶或使用者帳戶名稱。
PASSWORD 複寫使用者密碼。
DATABASE_LIST 以空格分隔的清單,列出外部伺服器上的所有資料庫,但系統資料庫 (sysmysqlperformance_schemainformation_schema) 除外。請使用 SHOW DATABASES MySQL 指令列出資料庫。
SOURCE_DATA 如果您使用的是 8.0.26 以外的舊版 MySQL,請使用 --master-data 做為此參數的值。如果是 MySQL 8.0.26 以上版本,請將這個參數的值設為 --source-data
ADD_DROP_TABLE 如果您想在每個 CREATE TABLE 陳述式前方新增 DROP TABLE 陳述式,請加入 --add-drop-table
ROUTINES 如果您想在傾印資料庫的輸出內容中顯示預存的常式 (例如程序和函式),請加入 --routines
COMPRESS 如果您想壓縮在 Cloud SQL 備援機制和外部伺服器之間傳送的所有資訊,請使用 --compress
GZIP 如要進一步壓縮傾印檔案,請使用 | gzip。如果資料庫包含未妥善壓縮的資料,例如無法壓縮的二進位資料或 JPG 圖片,請勿使用這項功能。
BUCKET 您在步驟 1 中建立的值區名稱,用於存放轉儲檔案。
DUMP_FILENAME 系統會在值區中建立這個名稱的檔案。這個檔案包含外部伺服器上資料庫的內容。

使用 Cloud Storage 值區的檔案路徑更新來源表示法例項

來源呈現例項是 Cloud SQL 執行個體,可將來源資料庫伺服器呈現給 Cloud SQL 備用資源。這個執行個體會顯示在 Google Cloud 控制台中,外觀與一般 Cloud SQL 執行個體相同,但不含任何資料,也不需要設定或維護,也不會影響帳單。

source.json 檔案包含來源表示例例項的相關資訊。

REST

{
  "name": "PRIMARY_INSTANCE_NAME",
  "region": "REGION_NAME",
  "databaseVersion": "DB_NAME_AND_VERSION",
  "onPremisesConfiguration": {
    "hostPort": "IP_ADDRESS_AND_PORT",
    "username": "USERNAME",
    "password": "PASSWORD"
  },
  "dumpFilePath" :"DUMP_FILE_PATH"
}

範例

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  },
  "dumpFilePath" :"gs://replica-bucket/source-database.sql.gz"
}
屬性 說明
PRIMARY_INSTANCE_NAME 與來源呈現例項相關聯的 Cloud SQL 執行個體名稱。
REGION_NAME 指派給來源表示法例項的區域名稱。
DB_NAME_AND_VERSION 與來源呈現例項相關聯的資料庫名稱和版本號碼。
IP_ADDRESS_AND_PORT 保留給來源呈現例項的 IP 位址和通訊埠號碼。
USERNAME 來源呈現例項的使用者名稱。
PASSWORD 來源呈現方式執行個體的密碼。
DUMP_FILE_PATH 備份檔案的路徑,其中包含外部伺服器上資料庫的內容。

設定 Cloud SQL 備用資源後,您必須使用 Cloud Storage 值區的檔案路徑更新來源表示法例項。

REST

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_REPRESENTATION_INSTANCE

範例

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./source.json \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
屬性 說明
JSON_PATH 儲存在 Cloud Storage 值區中的 JSON 檔案路徑。這個檔案包含來源呈現方式例項的資料。
PROJECT_ID Google Cloud中的專案 ID。
SOURCE_REPRESENTATION_INSTANCE 來源表示法例項的名稱。

在外部伺服器上啟動複製作業

確認可以從外部伺服器複製資料後,即可執行複製作業。

在初始匯入程序期間,請勿在外部伺服器上執行任何 DDL 作業。否則可能會導致匯入作業期間發生資料不一致的情況。匯入程序完成後,備用資源會使用外部伺服器上的二進位檔記錄,讓自己的狀態能與外部伺服器的狀態一致。

開啟終端機,使用 gcloud 登入,然後輸入 curl 指令,從外部伺服器複製資料。

REST

  gcloud auth login
  ACCESS_TOKEN="$(gcloud auth print-access-token)"
  curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
       --header 'Content-Type: application/json' \
       --data '{
           "syncMode": "SYNC_MODE",
           "skipVerification": "SKIP_VERIFICATION"
         }' \
       -X POST \
       https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/startExternalSync

範例

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "syncMode": "online",
             "skipVerification": false
           }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
屬性 說明
SYNC_MODE 驗證在設定複製作業後,您是否能讓 Cloud SQL 備援伺服器和外部伺服器保持同步。
SKIP_VERIFICATION 在同步處理資料前,是否要略過內建的驗證步驟。建議您在驗證複製設定後再執行此操作。
PROJECT_ID Google Cloud中的專案 ID。
REPLICA_INSTANCE Cloud SQL 備援資料庫的 ID。

清理儲存空間

如果您是從 bucket 中的檔案複製資料,可以移除這個檔案和 bucket。如要進一步瞭解如何刪除物件刪除值區,請參閱 Cloud Storage 說明文件。

繼續複製

從外部伺服器開始複製後,您需要監控複製作業,然後完成遷移作業。詳情請參閱「監控複製作業」。

疑難排解

問題 疑難排解
Lost connection to MySQL server during query when dumping table 來源可能無法使用,或傾印內容包含的封包太大。

確認外部主要裝置可連線。 您也可以修改來源執行個體的 net_read_timeoutnet_write_timeout 標記值,以停止錯誤。如要進一步瞭解這些旗標的可用值,請參閱「設定資料庫旗標」。

如要進一步瞭解如何使用 mysqldump 標記來進行受管理的匯入遷移作業,請參閱「 允許的初始同步處理標記和預設標記」一文。

初始資料遷移作業已成功完成,但沒有任何資料正在複製。 一個可能的根本原因是來源資料庫已定義複製作業標記,導致部分或所有資料庫變更未複製。

請確認 binlog-do-dbbinlog-ignore-dbreplicate-do-dbreplicate-ignore-db 等複製標記並未以衝突的方式設定。

在主要執行個體上執行 show master status 指令,即可查看目前的設定。

初始資料遷移作業成功,但資料複製作業過一段時間後就停止運作。 建議做法:

  • 在 Google Cloud 控制台的「Cloud Monitoring」專區中,查看複本執行個體的 複製指標
  • 您可以在 mysql.err log 檔案的 Cloud Logging 中,找到 MySQL IO 執行緒或 SQL 執行緒的錯誤。
  • 連線到複本執行個體時,也會發生這個錯誤。 執行 SHOW SLAVE STATUS 指令,並在輸出內容中檢查下列欄位:
    • Slave_IO_Running
    • Slave_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error
mysqld check failed: data disk is full 複本執行個體的資料磁碟已滿。

增加複本執行個體的磁碟空間。您可以手動增加磁碟大小,也可以啟用儲存空間自動增加功能。

查看複製記錄

驗證複寫設定時,系統會產生記錄。

如要查看這些記錄,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Logs Viewer」(記錄檢視器)。

    前往「記錄檢視器」

  2. 從「Instance」下拉式選單中選取 Cloud SQL 備用資源。
  3. 選取 replication-setup.log 記錄檔案。

如果 Cloud SQL 備用資源無法連線至外部伺服器,請確認下列事項:

  • 外部伺服器上的任何防火牆都會設定為允許 Cloud SQL 備援資源的傳出 IP 位址連線。
  • 安全資料傳輸層 (SSL)/傳輸層安全標準 (TLS) 設定正確無誤。
  • 複寫使用者、主機和密碼皆正確無誤。

後續步驟