本頁說明如何設定外部伺服器,以便複製到 Cloud SQL、在 Cloud SQL 上建立來源代表執行個體,以及將資料複製到 Cloud SQL。您必須完成本頁面的所有步驟,才能繼續進行複製步驟。
除了本頁面所述步驟,您也可以使用資料庫移轉服務,從外部伺服器持續複製資料或一次性遷移資料庫至 Cloud SQL。
事前準備
術語
外部伺服器。要從中複製資料的 Cloud SQL 外部 MySQL 伺服器。這也稱為來源資料庫或外部資料庫伺服器。可以是另一個 Cloud SQL 執行個體,也可以是任何其他資料庫伺服器,例如地端、Amazon Relational Database Service (RDS) 等。
來源代表例項。Cloud SQL 執行個體的模擬,代表 Cloud SQL 備用資源的外部伺服器。這項資源會顯示在 Google Cloud 控制台中,看起來就像一般的 Cloud SQL 執行個體,但不會包含資料、需要設定或維護,也不會影響帳單。
Cloud SQL 備用資源。從外部伺服器複製的 Cloud SQL 執行個體。也稱為外部主要讀取副本。
複製使用者帳戶。外部伺服器上的 MySQL 使用者帳戶,具備足夠的權限,可允許外部伺服器與 Cloud SQL 備用資源之間進行複製。
控管型匯入。直接從外部伺服器將資料匯入 Cloud SQL 副本的程序。在這種情況下,Cloud SQL 會使用複製使用者帳戶連線至外部伺服器,並直接在外部伺服器上執行資料傾印,將資料匯入 Cloud SQL 副本。
設定 Google Cloud 專案
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API.
-
確認使用者帳戶具備 Cloud SQL 管理員、Storage 管理員和 Compute 檢視者角色。
確認外部伺服器已安裝 MySQL 5.7、8.0 或 8.4。 支援 MySQL Community Edition、MySQL 適用的 Cloud SQL、Amazon Aurora、Amazon RDS 上的 MySQL,以及 Microsoft Azure Database for MySQL 彈性伺服器。
- Cloud SQL 副本使用的 MySQL 主要版本必須與外部伺服器上執行的 MySQL 版本相同或更高。
- 如果外部伺服器上安裝的是 MySQL 5.5,則不支援 GTID。
確認已啟用二進位記錄,且符合下列條件:
- 使用以列為單位的二進位記錄。
- 保留二進位記錄的時間必須夠長,才能支援資料庫遷移作業。通常一週就足夠。
請注意外部伺服器是否已啟用 GTID。這會影響設定複製功能時需要採取的步驟。
請注意外部伺服器是否具有全域讀取鎖定權限。這會影響您設定複寫時需要採取的步驟。
如果 Cloud SQL 副本已啟用私人 IP 位址,但外送私人 IP 位址不是靜態,請設定外部伺服器的防火牆,允許為 Cloud SQL 副本使用的虛擬私有雲網路的私人服務存取權分配的內部 IP 範圍。
您必須設定來源資料庫伺服器的防火牆,允許 Cloud SQL 目的地執行個體所用虛擬私有雲網路的私人服務連線,其內部 IP 範圍 (做為 ipConfiguration 設定的 privateNetwork 欄位)。
如要找出內部 IP 範圍,請按照下列步驟操作:
在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。
選取要使用的 VPC 網路。
按一下「Private service connection」(私人服務連線) 分頁標籤。
如果外部伺服器包含
DEFINER
子句 (檢視區塊、事件、觸發程序或預存程序),視這些陳述式的執行順序而定,複寫可能會失敗。進一步瞭解 Cloud SQL 中的DEFINER
使用情形和可能的解決方法。InnoDB 是 Cloud SQL 唯一支援的儲存引擎。使用 MyISAM 遷移可能會導致資料不一致,因此需要驗證資料。詳情請參閱 MySQL 說明文件中的「將資料表從 MyISAM 轉換為 InnoDB」。
MySQL 5.7:
expire_logs_days
MySQL 8.0.x:
expire_logs_days
,binlog_expire_logs_seconds
MySQL 8.4:
binlog_expire_logs_seconds
將
binlog_expire_logs_seconds
設為足以支援資料庫遷移作業的期間。詳情請參閱「在 Azure Database for MySQL 中設定伺服器參數」一文,以及 Microsoft 說明文件中的
binlog_expire_logs_seconds
參數。重新啟動伺服器,讓變更生效。
SSL_OPTION_UNSPECIFIED:
目的地資料庫會連線至來源資料庫,但不會加密。DISABLED:
備用資源連線至來源資料庫時,系統會停用 SSL。REQUIRE:
備用資源必須使用 SSL 才能連線至來源資料庫。VERIFY_CA:
使用這個參數指定是否要使用僅限伺服器驗證或伺服器用戶端驗證,做為 SSL/TLS 加密的一部分,在來源和目的地資料庫之間建立連線。如要使用僅限伺服器的驗證方式,您必須為
SOURCE_CERT
變數提供憑證授權單位 (CA) 的 x509 PEM 編碼憑證,該憑證授權單位簽署了外部伺服器的憑證。如要使用伺服器與用戶端驗證,請進行下列替換:
SOURCE_CERT:
提供簽署來源資料庫伺服器憑證的 CA 憑證CLIENT_CERT:
提供目的地資料庫用來驗證來源資料庫伺服器的憑證CLIENT_KEY:
提供與用戶端憑證相關聯的私密金鑰
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
將指標懸停在 Cloud SQL 副本的公開 IP 位址旁邊,然後將指標懸停在「更多資訊」工具提示上,即可擷取傳出 IP 位址。
請注意,輸出 IP 位址並非 Google Cloud 控制台中副本主要清單顯示的 IP 位址。
- 外部伺服器受到防火牆或其他網路限制。
- Cloud SQL 備用資源使用公開 IP。
- 外部伺服器的主機、連接埠或 IP 發生變更。
- 您想使用其他 MySQL 複製使用者。
- MySQL 複製使用者的密碼已變更。
- 用於安全連線至外部伺服器的 SSL 憑證已變更。
- 代管匯入作業會使用服務從外部伺服器擷取資料,並直接匯入 Cloud SQL 執行個體。Cloud SQL 建議使用這個選項。如果外部伺服器未使用全域交易 ID (GTID) 複製功能,就必須使用這個選項。詳情請參閱「使用代管匯入功能來設定從外部資料庫的複製作業」。
- 如要使用傾印檔案,您必須建立外部伺服器的傾印檔案,然後將檔案移至 Cloud Storage 值區,並匯入 Cloud SQL。只有在外部伺服器使用 GTID 複製功能時,才能使用這個選項。 詳情請參閱使用傾印檔案來設定從外部資料庫的複製作業。
- 如要自訂匯入作業,您必須建立 Cloud SQL 主要執行個體、使用偏好的工具執行自訂資料匯入作業、將主要執行個體降級為 Cloud SQL 備用資源,然後設定外部伺服器複製作業。這項功能最適合用於遷移數 TB 的資料庫,但您必須使用 GTID 複寫。詳情請參閱「使用自訂匯入功能設定大型外部資料庫的複製作業」。
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 如果是 MySQL 5.7 以上版本,請啟用複製功能。
- 找出要建立的副本,然後點按做為副本上層的副本「副本」分頁標籤。
- 按一下「建立備用資源」。
- 在「Create read replica」(建立唯讀備用資源) 頁面中,更新執行個體 ID 和其他任何設定選項,包括名稱、地區和區域。
- 按一下「建立」,
Cloud SQL 會建立備用資源。您會返回上層副本的執行個體頁面。
- 針對要建立的每個新連鎖副本,重複執行步驟 4 到 6。
- 如果您使用 MySQL 5.7 以上版本,請為新副本的主要資料庫啟用二進位記錄檔:
將 PARENT_REPLICA_NAME 替換為父項副本的名稱。gcloud sql instances patch --enable-bin-log --project=cascade-replica PARENT_REPLICA_NAME
- 使用
--master-instance-name
標記將 Cloud SQL 副本指定為主要執行個體,藉此建立新的副本: - REPLICA_NAME:您要建立的副本專屬 ID
- PARENT_REPLICA_NAME:Cloud SQL 備用資源的名稱
建立備用資源後,您會發現對主要執行個體所做的變更,會透過連鎖備用資源鏈中的所有備用資源進行複製。
- 如果您使用 MySQL 5.7 以上版本,請啟用二進位記錄:
如要啟用二進位記錄,請將下列 JSON 儲存為名為 request.JSON 的檔案,然後叫用 curl 指令來啟用二進位記錄。
{ "settings": { "backupConfiguration": { "enabled": false, "binaryLogEnabled": true } } }
- 如要在父項副本下建立副本,請編輯下列 JSON 程式碼範例,並儲存至名為
request.json
的檔案:{ "masterInstanceName": "EXTERNAL_SERVER_REPLICA_NAME", "project": "PROJECT_ID", "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", } }
- 請執行下列指令:
curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" -d @request.json "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"
- 將備用資源升級為主要執行個體。請注意,升級後的備用資源會啟用 GTID 和二進位記錄檔,並排定備份作業。
- 在執行個體中新增唯讀備用資源。
- 選用步驟:設定高可用性 (HA) 的執行個體。
如要避免額外停機,您可以在設定副本時啟用 HA,方法是將
AVAILABILITY_TYPE
設為REGIONAL
。 - 瞭解如何使用自訂匯入功能,設定從大型外部資料庫的複製作業。
- 瞭解如何使用傾印檔案設定從外部資料庫的複製作業。
安裝 Google Cloud SDK
如要設定複製功能,請為外部伺服器安裝 Google Cloud SDK。除非 SDK 已安裝在其他位置,否則您可能需要在外部伺服器上安裝 SDK。
設定外部伺服器以進行複製
外部伺服器檢查清單
設定二進位記錄檔保留期限
您應設定外部伺服器,將二進位記錄檔保留至少 24 小時。
MySQL Community
如果外部伺服器使用 MySQL Community Edition,您可以使用這些 MySQL 指令更新二進位記錄檔保留設定。
MySQL 適用的 Cloud SQL
如果外部伺服器使用 MySQL 適用的 Cloud SQL,系統預設會保留二進位記錄七天。你可以變更這項設定。
Amazon RDS 和 Aurora
如果外部伺服器是 Amazon RDS 執行個體,可以使用下列指令更新二進位記錄保留設定:
call mysql.rds_set_configuration('binlog retention ', HOURS);
屬性 | 說明 |
---|---|
小時 | Amazon RDS 執行個體要保留的二進位記錄總時數。 |
詳情請參閱 mysql.rds_set_configuration。
Microsoft Azure
二進位檔記錄功能預設為啟用。詳情請參閱 Microsoft 說明文件。
建立複製使用者帳戶
外部伺服器上必須有專門用於管理 Cloud SQL 備用資源複製作業的 MySQL 使用者帳戶。這個使用者帳戶只能用於管理複寫作業。視您採用的遷移方式而定,您可能需要稍後授予使用者權限。
如要新增複製使用者帳戶,請開啟外部伺服器上的終端機,然後輸入下列 MySQL 指令:
MySQL
CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD'; GRANT SELECT, SHOW VIEW ON *.* TO 'USERNAME'@'HOST'; FLUSH PRIVILEGES;
範例
CREATE USER 'replicationUser'@'%' IDENTIFIED BY '8*&fwwd';
GRANT SELECT, SHOW VIEW ON *.* TO 'replicationUser'@'%';
FLUSH PRIVILEGES;
屬性 | 說明 |
---|---|
USERNAME | 外部伺服器上的複製使用者帳戶。 |
PASSWORD | 複製使用者帳戶的密碼。 |
HOST | 將此值設為 % ,即可接受來自任何主機的所有連線。
在後續步驟中,這項設定會變更為只接受來自 Cloud SQL 副本的連線。 |
設定來源代表執行個體
來源代表執行個體會參照外部伺服器。其中只包含來自外部伺服器的要求資料。建立要求資料,並在 curl
指令中使用該資料,在 Cloud SQL 中建立來源表示法執行個體。
建立要求資料
要求資料包含外部伺服器的基本資訊 (JSON 格式)。您可以為公開或私有網路上的 Cloud SQL 副本設定要求資料,且資料應包含這項資訊。
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "hostPort": "SOURCE_HOST", "username": "USERNAME", "password": "PASSWORD", "caCertificate": "SOURCE_CERT", "clientCertificate": "CLIENT_CERT", "clientKey": "CLIENT_KEY", "sslOption": "SSL_OPTION" } }
受管理匯入作業範例
// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"hostPort": "192.0.2.0:3306",
"username": "replicationUser",
"password": "486#@%*@",
"sslOption": "REQUIRE"
}
}
dump 檔案範例
// example of source.json for external server that
// - initiates replication from a file
// - uses SSL/TLS
{
"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",
"caCertificate": "content of your certificate",
"clientCertificate": "content of your certificate",
"clientKey": "content of your client key",
"sslOption": "REQUIRE"
}
}
自訂匯入範例
// example of source.json for external server that
// - initiates replication from a Cloud SQL custom import
// - doesn't use SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"hostPort": "192.0.2.0:3306",
"username": "replicationUser",
"password": "486#@%*@",
"sslOption": "REQUIRE"
}
}
屬性 | 說明 |
---|---|
SOURCE_NAME | 要建立的來源表示法執行個體名稱。 |
REGION | 您要讓來源表示法執行個體所在的區域。 |
DATABASE_VERSION | 外部伺服器上執行的資料庫版本。選項包括 MYSQL_5_7 、MYSQL_8_0 或 MYSQL_8_4 。 |
SOURCE HOST | 外部伺服器的 IPv4 位址和連接埠,或是外部伺服器的 DNS 位址。如果使用 DNS 位址,最多可輸入 60 個字元。如果外部伺服器是託管在 Cloud SQL 上,則通訊埠為 3306 。 |
USERNAME | 外部伺服器上的複製使用者帳戶。 |
PASSWORD | 複製使用者帳戶的密碼。 |
BUCKET | 包含傾印檔案的值區名稱。只有在您使用 Cloud Storage bucket 中的傾印檔案設定複製功能時,才需要加入這項設定。 |
DUMP_FILE | bucket 中的檔案,內含外部伺服器的資料。 |
CLIENT_CA_CERT | 外部伺服器上的 CA 憑證。只有在外部伺服器使用 SSL/TLS 時才加入。 |
CLIENT_CERT | 外部伺服器上的用戶端憑證。僅適用於伺服器與用戶端驗證。 只有在外部伺服器使用 SSL/TLS 時才需要提供。 |
CLIENT_KEY | 外部伺服器上用戶端憑證的私密金鑰檔案。 僅適用於伺服器與用戶端驗證。 只有在外部伺服器使用 SSL/TLS 時才需要提供。 |
SSL_OPTION | 是否使用 SSL/TLS 加密,在來源 Microsoft Azure 資料庫和目的地 Cloud SQL 資料庫之間建立連線。您可以為這個參數指定下列值: 這個參數的預設值是 |
建立來源表示法執行個體
開始這個步驟前,請建立包含來源要求資料的 JSON 檔案。
接著,如要在 Cloud SQL 中建立來源代表執行個體,請開啟終端機並執行下列指令:
curl
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 POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
範例
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 POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
屬性 | 說明 |
---|---|
PROJECT_ID | 專案在 Google Cloud中的 ID。 |
JSON_PATH | 包含外部伺服器要求資料的 JSON 檔案路徑。 |
更新來源表示法執行個體
如果更新外部伺服器的要求資料,可以更新現有的來源表示法執行個體,以使用修改過的值。
修改要求資料
更新要求資料,納入所有已變更的欄位。包括 hostPort
、username
、password
、caCertificate
、clientCertificate
和 clientKey
欄位。更新要求資料後,請在 curl
指令中使用該資料,更新 Cloud SQL 中的執行個體。
以下範例說明如何使用不同的使用者名稱和密碼更新 username
和 password
欄位:
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "username": "NEW_USERNAME", "password": "NEW_PASSWORD" } }
受管理匯入作業範例
// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"username": "newReplicationUser",
"password": "525#@%*@"
}
}
dump 檔案範例
// example of source.json for external server that
// - initiates replication from a file
// - uses SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"username": "newReplicationUser",
"password": "486#@%*@"
}
}
自訂匯入範例
// example of source.json for external server that
// - initiates replication from a Cloud SQL custom import
// - doesn't use SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"username": "newReplicationUser",
"password": "486#@%*@"
}
}
屬性 | 說明 |
---|---|
SOURCE_NAME | 來源表示法執行個體的名稱。 |
REGION | 來源表示法執行個體所在的區域。 |
DATABASE_VERSION | 外部伺服器上執行的資料庫版本。選項為 MYSQL_5_6 、MYSQL_5_7 、MYSQL_8_0 或 MYSQL_8_4 。 |
NEW_USERNAME | 外部伺服器上的新複製使用者帳戶。 |
NEW_PASSWORD | 新帳戶的密碼。 |
修改來源表示法執行個體
開始這個步驟前,請建立包含修改後要求資料的 JSON 檔案。
接著,如要在 Cloud SQL 中修改來源代表執行個體,請開啟終端機並執行下列指令:
curl
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_NAME
範例
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
屬性 | 說明 |
---|---|
PROJECT_ID | 專案在 Google Cloud中的 ID。 |
JSON_PATH | 包含外部伺服器要求資料的 JSON 檔案路徑。 |
SOURCE_NAME | 來源表示法執行個體的名稱。 |
設定 Cloud SQL 備用資源
Cloud SQL 備用資源最終會包含外部伺服器的資料。在這個步驟中,您會建立要求資料,並在 curl
指令中使用該資料,在 Cloud SQL 中建立 Cloud SQL 副本。
建立要求資料
要求資料包含外部伺服器和 Cloud SQL 副本的基本資訊 (JSON 格式)。您可以為公有或私有網路上的 Cloud SQL 副本設定要求資料,且資料應包含下列資訊:
replica.json
{ "settings": { "tier": "TIER", "dataDiskSizeGb": "DISK_SIZE", "ipConfiguration": { "ipv4Enabled": "PUBLIC_IP_STATUS", "privateNetwork": "projects/PROJECT_ID/global/networks/NETWORK_NAME" }, "availabilityType": "AVAILABILITY_TYPE" }, "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME", "region": "SOURCE_REGION", "databaseVersion": "DATABASE_VERSION", "name": "REPLICA_NAME" }
範例
{ "settings": { "tier": "db-custom-4-15360", "dataDiskSizeGb": "100" }, "masterInstanceName": "source-instance", "region": "us-central1", "databaseVersion": "MYSQL_8_0", "name": "replica-instance" }
屬性 | 說明 |
---|---|
TIER | 用於代管副本執行個體的機器類型。如果您不知道該使用哪種機器類型,請先從 db-custom-2-7680 開始。日後可視需要變更大小和其他支援的值。 |
DISK_SIZE | Cloud SQL 副本的儲存空間大小 (GB)。 |
PUBLIC_IP_STATUS | 決定是否要為執行個體指派公開 IP 位址。根據預設,這個屬性的值為 true 。如要關閉副本的公開 IP 位址指派作業,請將值設為 false 。
如果專案已啟用constraints/sql.restrictPublicIp 機構組織政策,則如要建立 Cloud SQL 副本,必須將 ipv4Enabled 屬性的值設為 false 。如要進一步瞭解如何關閉公開 IP 位址指派功能,請參閱「停用公開 IP」。 |
PROJECT_ID | 如果 Cloud SQL 副本位於私人網路上,請在 replica.json 檔案中加入 privateNetwork 屬性。請將 PROJECT_ID 替換為 Google Cloud中的專案 ID。 |
NETWORK_NAME | 要與 Cloud SQL 副本搭配使用的私人網路名稱。 |
AVAILABILITY_TYPE | Cloud SQL 副本的可用性類型。根據預設,這個值為 ZONAL 。如要將副本設為高可用性,請將值設為 REGIONAL 。如要瞭解允許的值,請參閱 SqlAvailabilityType。建立外部伺服器 HA 副本後,就無法變更為非 HA 副本。反之亦然。您無法將外部伺服器非高可用性副本變更為高可用性副本。 如果執行個體仍在載入初始資料,或已從來源複製資料,手動容錯移轉可能會導致無法復原的遷移作業,或暫時停機。檢查複製狀態。 |
SOURCE_REPRESENTATION_INSTANCE_NAME | 來源代表執行個體的名稱。 |
SOURCE_REGION | 指派給來源代表執行個體的地區。 |
DATABASE_VERSION | 要搭配 Cloud SQL 副本使用的資料庫版本。這個版本的選項包括 MYSQL_5_6 、MYSQL_5_7 、MYSQL_8_0 或 MYSQL_8_4 。
與外部伺服器上執行的資料庫版本相符,或將值設為不超過一個版本。 |
REPLICA_NAME | 要建立的 Cloud SQL 備用資源名稱。 |
建立 Cloud SQL 備用資源
開始這個步驟之前,請建立包含副本要求資料的 JSON 檔案。 接著,開啟 Cloud Shell 終端機並執行下列指令,即可建立 Cloud SQL 副本:
curl
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 POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
範例
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @./replica.json \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
屬性 | 說明 |
---|---|
PROJECT_ID | Google Cloud中的專案 ID,必須與來源執行個體的專案 ID 相同。 |
JSON_PATH | 包含 Cloud SQL 備用資源要求資料的 JSON 檔案路徑。 |
驗證設定
如要確認執行個體設定正確,請前往 Cloud SQL 執行個體頁面。
您應該會看到來源代表執行個體和 Cloud SQL 副本,清單類似於下列內容:
執行個體 ID | 類型 | 公開 IP |
---|---|---|
(-) source-representation-instance | 資料庫外部主要 | 10.68.48.3:3306 |
replica-instance | 資料庫唯讀備用資源 | 34.66.48.59 |
此外,請確認您對 Cloud SQL 副本具有 cloudsql.instances.migrate
權限。cloudsql.admin
或 cloudsql.editor
IAM 角色都具備此權限。
將使用者新增至 Cloud SQL 備用資源
您無法從外部伺服器匯入資料庫使用者帳戶,但可以在 Cloud SQL 備用資源上建立帳戶。請先完成這個步驟,再從外部伺服器複製資料。
取得 Cloud SQL 副本的外送 IP 位址
您可以使用 Cloud SQL 副本的外送 IP 位址,在外部伺服器和 Cloud SQL 副本之間建立安全連線。系統不會針對這個 IP 位址收費。
主控台
如要取得副本的輸出 IP 位址,請按照下列步驟操作:
gcloud
如要取得副本的輸出 IP 位址,請執行下列指令:
gcloud sql instances describe REPLICA_NAME --format="default(ipAddresses)"
屬性 | 說明 |
---|---|
REPLICA_NAME | 您要擷取其輸出公開 IP 位址的 Cloud SQL 副本名稱。 |
允許外部伺服器上的連入連線
Cloud SQL 副本必須連線至外部伺服器,才能成功複製。如果符合下列條件,您必須設定外部伺服器的網路防火牆,以接受來自 Cloud SQL 副本傳出 IP 位址的連線:
如要連線至 Cloud SQL 副本,請使用副本的主要 IP 位址。這個 IP 位址會顯示在 Google Cloud 控制台中。
更新來源代表執行個體,允許複寫至 Cloud SQL 備用資源
為 Cloud SQL 副本設定來源代表執行個體後,您可能需要更新來源代表執行個體。舉例來說,在下列情況下,您需要更新設定:
為 Cloud SQL 備用資源提供種子資料
您可以透過下列三種方式,將資料從外部伺服器初始載入至 Cloud SQL 備用資源:
哪種方案適合你?
監控備用資源
Cloud SQL 備用資源完成初始資料載入後,會連線至外部伺服器,並套用匯出作業後的所有更新。確認複製狀態。
將副本升級為獨立執行個體前,請務必先檢查複製狀態。如果複製程序未順利完成,升級的副本就不會包含外部伺服器的所有變更。
如果複製延遲時間並未趨近於 0,請採取步驟解決問題。建議您查看下列指標:/postgresql/external_sync/initial_sync_complete
、postgresql/external_sync/max_replica_byte_lag
和 database/replication/state
。查看 Cloud SQL 指標清單。
Cloud SQL 備用資源趕上外部伺服器,且 Cloud SQL 備用資源沒有複製延遲後,請連線至資料庫。執行適當的資料庫指令,確保內容與外部伺服器比較時符合預期。請保留外部伺服器,直到完成必要驗證為止。
設定層疊式備用資源
遷移完成後,您可以先在 Cloud SQL 備用資源下建立串聯式唯讀備用資源,再升級 Cloud SQL 備用資源。
只有在使用 GTID 複製時,才能為 Cloud SQL 執行個體建立串聯式備用資源。如要建立連鎖副本,請執行下列指令:
主控台
gcloud
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PARENT_REPLICA_NAME \
curl
推送備用資源
請按照下列步驟升級副本: