本頁面說明如何設定及使用資料的受控匯入功能,以便從外部伺服器複製至 Cloud SQL。
請務必完成本頁所有步驟。完成後,您可以以與其他 Cloud SQL 執行個體相同的方式,管理及監控來源呈現方式執行個體。
事前準備
在開始之前,請先完成下列步驟:
更新複製使用者的權限
外部伺服器上的複製使用者已設定為接受來自任何主機的連線 (%
)。請更新這個使用者帳戶,以便只與 Cloud SQL 備援資料庫搭配使用。
所需權限
遷移和傾印的組合有四種。
- 類型 1:持續遷移和受管理的傾印
- 類型 2:持續遷移和手動傾印
- 類型 3:一次性遷移和受管理的傾印
- 類型 4:一次性遷移和手動傾印
以下列出各類型遷移作業和無意義組合的權限。
類型 1
使用者帳戶必須具備下列權限:
- REPLICATION SLAVE
- 執行
- SELECT
- Show View
- 複寫用戶端
- 重新載入
- 觸發條件
- (僅適用於從 Amazon RDS 和 Amazon Aurora 遷移) LOCK TABLES
針對 MySQL 8.0 以上版本,建議您略過 BACKUP ADMIN
權限,以便發揮最佳效能。
類型 2
使用者帳戶必須具備下列權限:
類型 3
使用者帳戶必須具備下列權限:
針對 MySQL 8.0 以上版本,建議您略過 BACKUP ADMIN
權限,以便發揮最佳效能。
類型 4
不需要任何權限。
更新權限
如要更新權限,請在外部伺服器上開啟終端機,然後輸入下列指令。
MySQL 用戶端
針對 GTID:
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION_CLIENT, RELOAD ON . TO 'USERNAME'@'HOST'; FLUSH PRIVILEGES;
對於 binlog:
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT, RELOAD 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, SELECT, SHOW VIEW, REPLICATION CLIENT,
RELOAD ON *.* TO 'username'@'host.com';
FLUSH PRIVILEGES;
屬性 | 說明 |
---|---|
NEW_HOST | 指定 Cloud SQL 備用資源的傳出 IP。 |
OLD_HOST | 您要變更的 Host 目前指派的值。 |
USERNAME | 外部伺服器上的複製使用者帳戶。 |
GCP_USERNAME | 使用者帳戶的使用者名稱。 |
HOST | 使用者帳戶的主機名稱。 |
確認複製設定
設定完成後,請確認 Cloud SQL 備用資源可以從外部伺服器複製資料。
下列外部同步設定必須正確無誤。
- Cloud SQL 備援機制與外部伺服器之間的連線
- 複製使用者權限
- 版本相容性
- Cloud SQL 備用資源尚未複製
- 外部伺服器已啟用二進位檔記錄
- 如果您嘗試從 RDS 外部伺服器進行外部同步處理,且使用的是 Google Cloud bucket,則會啟用 GTID
如要確認這些設定,請開啟 Cloud Shell 終端機並輸入下列指令:
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",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"mysqlSyncConfig": {
"initialSyncFlags": "SYNC_FLAGS"
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/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",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/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",
"syncParallelLevel": "optimal"
"mysqlSyncConfig": {
"initialSyncFlags": [{"name": "max-allowed-packet", "value": "1073741824"}, {"name": "hex-blob"}, {"name": "compress"}]
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/verifyExternalSyncSettings
這些呼叫會傳回 sql#externalSyncSettingErrorList
類型的清單。
如果清單為空白,表示沒有錯誤。沒有錯誤的回應如下所示:
{ "kind": "sql#externalSyncSettingErrorList" }
屬性 | 說明 |
---|---|
SYNC_MODE | 請確認在設定複製功能後,Cloud SQL 備用資源和外部伺服器可以保持同步。同步處理模式包括 EXTERNAL_SYNC_MODE_UNSPECIFIED 、ONLINE 和 OFFLINE 。 |
SYNC_PARALLEL_LEVEL | 確認用於控制資料庫資料表資料傳輸速度的設定。可用的值如下:
注意:這個參數的預設值是 |
SYNC_FLAGS | 要驗證的初始同步處理標記清單。只有在您打算從來源複製時使用自訂同步處理標記時,才建議使用。如需允許的旗標清單,請參閱「初始同步處理旗標」。 |
PROJECT_ID | Google Cloud 專案的 ID。 |
REPLICA_INSTANCE_ID | Cloud SQL 備援資料庫的 ID。 |
全域讀取鎖定權限
如果您沒有在外部伺服器上存取全域讀取鎖的權限 (Amazon RDS 和 Amazon Aurora 可能就是這種情況),請按照下列步驟暫停對伺服器的寫入作業:
- 前往「Logs Explorer」,然後從資源清單中選取 Cloud SQL 複本。您應該會看到 Cloud SQL 備用資源的最新記錄清單。請暫時忽略這些錯誤。
- 開啟終端機,然後輸入在外部伺服器上啟動複製作業中的指令,即可從外部伺服器複製資料。
返回「Logs Explorer」(記錄檔探索工具)。當您看到以下記錄時,請停止寫入外部伺服器上的資料庫。在大多數情況下,這項操作只需要幾秒鐘的時間。
DUMP_IMPORT(START): Start importing data, please pause any write to the external primary database.
如果在記錄檔探索工具中看到下列記錄項目,請重新啟用寫入外部伺服器資料庫的功能。
DUMP_IMPORT(SYNC): Consistent state on primary and replica. Writes to the external primary may resume.
在外部伺服器上啟動複製作業
確認可以從外部伺服器複製資料後,請開始複製作業。初始匯入程序的複製速度最高可達每小時 500 GB。不過,這項速度可能會因機器層級、資料磁碟大小、網路傳輸量和資料庫的性質而異。
在初始匯入程序期間,請勿在外部伺服器上執行任何 DDL 作業。否則可能會導致匯入作業期間發生資料不一致的情況。匯入程序完成後,備用資源會使用外部伺服器上的二進位檔記錄,讓自己的狀態能與外部伺服器的狀態一致。
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",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"mysqlSyncConfig": {
"initialSyncFlags": "SYNC_FLAGS"
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/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",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/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",
"syncParallelLevel": "optimal"
"skipVerification": false,
"mysqlSyncConfig": {
"initialSyncFlags": [{"name": "max-allowed-packet", "value": "1073741824"}, {"name": "hex-blob"}, {"name": "compress"}]
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
屬性 | 說明 |
---|---|
SYNC_MODE | 確認您可以在設定複製作業後,讓 Cloud SQL 備用資源和外部伺服器保持同步。 |
SKIP_VERIFICATION | 是否在同步處理資料前略過內建的驗證步驟。建議您在驗證複製設定後,再使用這個參數。 |
SYNC_PARALLEL_LEVEL | 提供設定,用於控制從資料庫表格傳輸資料的速度。可用的值如下:
注意:這個參數的預設值是 |
SYNC_FLAGS | 要驗證的初始同步處理標記清單。只有在您打算從來源複製時使用自訂同步處理標記時,才建議使用。如需允許的旗標清單,請參閱「初始同步處理旗標」。 |
PROJECT_ID | Google Cloud 專案的 ID。 |
REPLICA_INSTANCE_ID | Cloud SQL 備援資料庫的 ID。 |
初始同步處理標記
如要使用自訂資料庫標記遷移資料,您可以使用下列允許的標記:
- --add-drop-database
- --add-drop-table
- --add-drop-trigger
- --add-locks
- --allow-keywords
- --all-tablespaces
- --apply-slave-statements
- --column-statistics
- --comments
- --compact
- --compatible
- --complete-insert
- --compress
- --compression-algorithms
- --create-options
- --default-character-set
- --delayed-insert
- --disable-keys
- --dump-date
- --events
- --extended-insert
- --fields-enclosed-by
- --fields-escaped-by
- --fields-optionally-enclosed-by
- --fields-terminated-by
- --flush-logs
- --flush-privileges
- --force
- --get-server-public-key
- --hex-blob
- --ignore-error
- --ignore-read-lock-error
- --ignore-table
- --insert-ignore
- --lines-terminated-by
- --lock-all-tables
- --lock-tables
- --max-allowed-packet
- --net-buffer-length
- --network-timeout
- --no-autocommit
- --no-create-db
- --no-create-info
- --no-data
- --no-defaults
- --no-set-names
- --no-tablespaces
- --opt
- --order-by-primary
- --pipe
- --quote-names
- --quick
- --replace
- --routines
- --secure-auth
- --set-charset
- --shared-memory-base-name
- --show-create-skip-secondary-engine
- --skip-opt
- --ssl-cipher
- --ssl-fips-mode
- --ssl-verify-server-cert
- --tls-ciphersuites
- --tls-version
- --triggers
- --tz-utc
- --verbose
- --xml
- --zstd-compression-level
如要瞭解允許的值,請參閱 MySQL 公開文件。
監控遷移作業
從外部伺服器開始複製後,您需要監控複製作業。詳情請參閱「監控複製作業」。即可完成遷移作業。
疑難排解
請考慮採用下列疑難排解選項:
問題 | 疑難排解 |
---|---|
唯讀副本在建立時未開始複製作業。 | 記錄檔中可能會有更具體的錯誤。 請在 Cloud Logging 中檢查記錄,找出實際錯誤。 |
無法建立唯讀副本 - invalidFlagValue 錯誤。 | 要求中有一項標記無效。這個旗標可以是您明確提供的旗標,也可以是設為預設值的旗標。 首先,請確認 如果 |
無法建立唯讀副本 - 發生不明錯誤。 | 記錄檔中可能會有更具體的錯誤。請在 Cloud Logging 中檢查記錄,找出實際錯誤。 如果錯誤為 |
磁碟已滿。 | 在建立備援執行個體時,主要執行個體的磁碟空間可能會用盡。 編輯主要執行個體,將其升級為較大的磁碟大小。 |
副本執行個體使用太多記憶體。 | 備份資源會使用暫存記憶體快取常見的讀取作業,因此可能會比主要執行個體使用更多記憶體。 重新啟動複本執行個體,以便回收暫時性記憶體空間。 |
複製作業已停止。 | 已達儲存空間上限,且未啟用自動增加儲存空間功能。
編輯執行個體,啟用 |
複製延遲持續偏高。 | 寫入負載過高,複本無法處理。當備援機制上的 SQL 執行緒無法跟上 I/O 執行緒時,就會發生複製延遲。某些類型的查詢或工作負載,可能會導致特定結構定義的複製延遲時間暫時或永久性偏高。複製延遲的常見原因包括:
可能的解決方法包括:
|
複製延遲時間突然飆升。 | 這是因為長時間執行的交易。當交易 (單一陳述式或多個陳述式) 在來源執行個體上進行修訂時,系統會在二進位記錄中記錄交易的開始時間。當副本收到此 binlog 事件時,會將該時間戳記與目前的時間戳記進行比較,以計算複製延遲時間。因此,來源上長時間執行的交易會導致備援資料上立即出現大量複製延遲。如果交易中的資料列變更數量龐大,複本執行交易的時間也會很長。在這段期間,複製延遲時間會增加。副本完成這筆交易後,追趕期間將取決於來源的寫入工作負載和副本的處理速度。 為避免交易時間過長,可採用以下解決方案:
|
變更並行複製旗標會導致錯誤。 | 為一或多個標記設定了錯誤的值。
在顯示錯誤訊息的主執行個體上設定平行複製標記:
|
備援機制建立作業因逾時而失敗。 | 主要執行個體上長時間執行未提交的交易,可能會導致建立唯讀備用資源失敗。 停止所有執行中的查詢後,重新建立複本。 |
此外,針對 MySQL,請考慮下列選項:
問題 | 疑難排解 |
---|---|
Lost connection to MySQL server during query when dumping table 。 |
來源可能無法使用,或傾印內容包含的封包太大。 確認外部主要裝置可連線。 您也可以修改來源執行個體的 net_read_timeout 和 net_write_timeout 標記值,以停止錯誤。如要進一步瞭解這些旗標的可用值,請參閱「設定資料庫旗標」。 如要進一步瞭解如何使用 |
初始資料遷移作業已成功完成,但沒有任何資料正在複製。 | 一個可能的根本原因是來源資料庫已定義複製作業標記,導致部分或所有資料庫變更未複製。 請確認 在主要執行個體上執行 |
初始資料遷移作業成功,但資料複製作業過一段時間後就停止運作。 | 建議做法:
|
mysqld check failed: data disk is full 。 |
複本執行個體的資料磁碟已滿。 增加複本執行個體的磁碟空間。您可以手動增加磁碟大小,也可以啟用儲存空間自動增加功能。 |
查看複製記錄
驗證複寫設定時,系統會產生記錄。
如要查看這些記錄,請按照下列步驟操作:
前往 Google Cloud 控制台的「Logs Viewer」(記錄檢視器)。
- 從「Instance」下拉式選單中選取 Cloud SQL 備用資源。
- 選取
replication-setup.log
記錄檔案。
如果 Cloud SQL 備用資源無法連線至外部伺服器,請確認下列事項:
- 外部伺服器上的任何防火牆都會設定為允許 Cloud SQL 備援資源的傳出 IP 位址連線。
- 安全資料傳輸層 (SSL)/傳輸層安全標準 (TLS) 設定正確無誤。
- 複寫使用者、主機和密碼皆正確無誤。
後續步驟
- 瞭解如何更新執行個體。
- 瞭解如何管理備用資源。
- 瞭解如何監控執行個體。
- 瞭解如何升級 Cloud SQL 備用資源。