本頁面說明如何使用從外部伺服器建立的 dump 檔案設定複製作業。
您必須完成本頁的所有步驟。完成後,您就能像管理及監控其他 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 | Cloud de Confiance by S3NS 使用者帳戶的使用者名稱。 |
| HOST | Cloud de Confiance by S3NS 使用者帳戶的主機名稱。 |
驗證複製設定
設定完成後,請確認 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_UNSPECIFIED、ONLINE 和 OFFLINE。 |
| SKIP_VERIFICATION | 是否要在同步處理資料前,略過內建的驗證步驟。建議您先驗證複製設定,再執行這項操作。 |
| PROJECT_ID | Cloud de Confiance中的專案 ID。 |
| REPLICA_INSTANCE | Cloud SQL 副本的 ID。 |
將資料庫匯出至 Cloud Storage bucket
您可以使用位於 Cloud Storage bucket 中的 mysqldump 檔案,填入 Cloud SQL 副本。適用條件如下:
- 您必須使用 MySQL 隨附的
mysqldump公用程式。 mysqldump執行期間,請勿在外部伺服器上執行任何 DDL 作業。否則可能會導致匯出檔案中有資料不一致的情況發生。
如要將資料庫匯出至 Cloud Storage bucket,請按照下列步驟操作:
- 在 Cloud de Confiance中建立 Cloud Storage bucket。
- 使用連線至外部資料庫伺服器的用戶端開啟終端機,然後執行下列指令。
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 | 外部伺服器上所有資料庫的清單 (以空格分隔),但不包括系統資料庫 (sys、mysql、performance_schema 和 information_schema)。請使用 SHOW DATABASES MySQL 指令列出資料庫。 |
| SOURCE_DATA | 如果您使用的 MySQL 版本低於 8.0.26,請將這個參數的值設為 --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 | 如要進一步壓縮 dump 檔案,請使用 | gzip。如果資料庫包含無法妥善壓縮的資料,例如二進位不可壓縮資料或 JPG 圖片,請勿使用這項功能。 |
| BUCKET | 您在步驟 1 建立的 bucket 名稱,用於存放 dump 檔案。 |
| DUMP_FILENAME | 系統會在 bucket 中建立這個名稱的檔案。這個檔案包含外部伺服器上的資料庫內容。 |
使用 Cloud Storage bucket 的檔案路徑更新來源表示法執行個體
來源代表執行個體是 Cloud SQL 執行個體,代表 Cloud SQL 副本的來源資料庫伺服器。您可以在 Cloud de Confiance by S3NS 控制台查看,外觀與一般 Cloud SQL 執行個體相同,但沒有資料、不需設定或維護,也不會影響帳單。
source.json 檔案包含來源表示法執行個體的相關資訊。
REST
{ "name": "PRIMARY_INSTANCE_NAME", "region": "REGION_NAME", "databaseVersion": "DB_NAME_AND_VERSION", "onPremisesConfiguration": { "hostPort": "IP_ADDRESS_AND_PORT", "selectedObjects": "SELECTED_OBJECTS", "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", "selectedObjects":[{"database":"db1"}, {"database":"db3"}], "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 位址和通訊埠號碼。 |
| SELECTED_OBJECTS | 更新後的物件清單 (以半形逗號分隔),指定要從來源代表執行個體遷移至目的地 Cloud SQL 執行個體的資料庫。 |
| USERNAME | 來源表示法執行個體的使用者名稱。 |
| PASSWORD | 來源表示法執行個體的密碼。 |
| DUMP_FILE_PATH | dump 檔案的路徑,其中包含外部伺服器上的資料庫內容。 |
設定 Cloud SQL 副本後,您需要使用 Cloud Storage bucket 的檔案路徑,更新來源代表執行個體。
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 bucket 中的 JSON 檔案路徑。這個檔案包含來源表示法執行個體的資料。 |
| PROJECT_ID | Cloud de Confiance中的專案 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 | Cloud de Confiance中的專案 ID。 |
| REPLICA_INSTANCE | Cloud SQL 副本的 ID。 |
清理儲存空間
如果您是從 bucket 中的檔案複製,可以移除這個檔案和 bucket。請參閱 Cloud Storage 說明文件,瞭解如何刪除物件和刪除 bucket。
繼續複製
從外部伺服器啟動複製作業後,您需要監控複製作業,然後完成遷移。詳情請參閱「監控複製作業」。
疑難排解
| 問題 | 疑難排解 |
|---|---|
Lost connection to MySQL server during query when dumping table。 |
來源可能已無法使用,或傾印內容包含過大的封包。 確認外部主要執行個體可供連線。您也可以修改來源執行個體上的 net_read_timeout 和 net_write_timeout 旗標值,停止錯誤。如要進一步瞭解這些旗標允許的值,請參閱「設定資料庫旗標」。 如要進一步瞭解如何使用 |
初始轉儲失敗,並顯示逾時或連線中斷錯誤 (例如 Dump timeout 或 Lost connection to MySQL server)。 |
如果一或多個 DDL 陳述式與平行轉儲程序互動,導致程序無限期等待,就可能發生這項錯誤。 解決方法:在初始轉儲階段,請勿在來源資料庫上執行 DDL 陳述式。執行任何 DDL 陳述式之前,請重新啟動遷移作業,並等待初始轉儲階段完成。 |
| 初始資料遷移作業成功,但未複製任何資料。 | 可能原因之一是來源資料庫定義了複製標記,導致部分或所有資料庫變更未複製。 確認複製旗標 (例如 在主要執行個體上執行 |
| 初始資料遷移作業成功,但資料複製作業在一段時間後停止運作。 | 建議做法:
如果看到
|
mysqld check failed: data disk is full。 |
副本執行個體的資料磁碟已滿。
增加副本執行個體的磁碟大小。您可以手動增加磁碟大小,或啟用儲存空間自動增加功能。 |
查看複製記錄
驗證複製設定時,系統會產生記錄。
如要查看這些記錄,請按照下列步驟操作:
前往 Cloud de Confiance 控制台的記錄檢視器。
- 從「Instance」(執行個體) 下拉式選單中選取 Cloud SQL 副本。
- 選取
replication-setup.log記錄檔。
如果 Cloud SQL 副本無法連線至外部伺服器,請確認下列事項:
- 外部伺服器上的任何防火牆都已設為允許來自 Cloud SQL 副本傳出 IP 位址的連線。
- SSL/TLS 設定正確。
- 複製使用者、主機和密碼正確無誤。
後續步驟
- 瞭解如何更新執行個體。
- 瞭解如何管理備用資源。
- 瞭解如何監控執行個體。
- 瞭解如何升級 Cloud SQL 副本,將副本升級為獨立執行個體,並停止從外部伺服器複製。