本頁說明如何設定外部伺服器,以便複製到 Cloud SQL、在 Cloud SQL 上建立來源代表執行個體,以及將資料複製到 Cloud SQL。您必須完成本頁面的所有步驟,才能繼續進行複製步驟。
除了本頁面所述步驟,您也可以使用資料庫移轉服務,從外部伺服器持續複製資料或一次性遷移資料庫至 Cloud SQL。
事前準備
術語
外部伺服器。要從中複製資料的 Cloud SQL 外部 PostgreSQL 伺服器。這也稱為來源資料庫或外部資料庫伺服器。可以是另一個 Cloud SQL 執行個體,也可以是任何其他資料庫伺服器,例如地端、Amazon Relational Database Service (RDS) 等。
來源代表例項。Cloud SQL 執行個體的模擬,代表 Cloud SQL 備用資源的外部伺服器。這項資源會顯示在 Google Cloud 控制台中,看起來就像一般的 Cloud SQL 執行個體,但不會包含資料、需要設定或維護,也不會影響帳單。
Cloud SQL 備用資源。從外部伺服器複製的 Cloud SQL 執行個體。也稱為外部主要讀取副本。
複製使用者帳戶。外部伺服器上的 PostgreSQL 使用者帳戶,具備足夠的權限,可允許外部伺服器與 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 檢視者角色。
- 自行管理的 PostgreSQL (on-premises 或完全由您掌控的 Cloud VM) 9.4、9.5、9.6、10、11、12、13、14、15、16 和 17
- Amazon RDS 9.6.10+、10.5+、11.1+、12、13、14、15、16 和 17
- Amazon Aurora 10.11+、11.6+、12.4+、13.3+、14.6+、15.2+、16 和 17
- Microsoft Azure Database for PostgreSQL Flexible Server 11 以上版本
- Cloud SQL 9.6、10、11、12、13、14、15、16 和 17
在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。
選取要使用的 VPC 網路。
按一下「Private service connection」(私人服務連線) 分頁標籤。
- 如果來源執行個體未包含
postgres
資料庫,請建立該資料庫。 - 在來源執行個體上安裝 pglogical 套件。
視需要設定下列參數。
如果來源 PostgreSQL 執行個體是 Amazon RDS,請在 新的參數群組中加入這些參數,並將參數群組附加至執行個體。
如果來源是 Cloud SQL,請將
cloudsql.logical_decoding
和cloudsql.enable_pglogical
旗標設為on
。如要在 Cloud SQL 中啟用旗標,請參閱「設定資料庫旗標」。
使用下列指令設定
shared_preload_libraries
,加入pglogical
:ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
使用下列指令將
wal_level
設為logical
:ALTER SYSTEM SET wal_level = 'logical';
如果來源 PostgreSQL 執行個體是 Amazon RDS,請將
logical
層級的rds.logical_replication
參數設為1
,啟用 WAL 記錄。使用下列指令將
wal_sender_timeout
設為0
:ALTER SYSTEM SET wal_sender_timeout = 0;
值
0
會停用逾時機制,該機制用於終止閒置的複寫連線。將 max_replication_slots 設為來源執行個體可支援的複寫運算單元數量上限。使用下列指令,並將 MAX_REPLICATION_SLOTS 替換為該號碼:
ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;
Cloud SQL 會為每個遷移的資料庫各保留一個時段。至少要指定預期連線的訂閱項目數量,並預留一些空間供資料表同步處理。
舉例來說,如果來源執行個體有 5 個資料庫,且為來源建立 2 項遷移工作,那麼除了已使用的複製作業運算單元數量外,複製作業運算單元至少還須有 5 * 2 = 10 個。
請將 max_wal_senders 設為至少與
max_replication_slots
相同,再加上執行個體上已使用的傳送者數量。使用下列指令,並將 MAX_WAL_SENDERS 改為同時執行的 WAL 傳送程序總數:ALTER SYSTEM SET max_wal_senders = MAX_WAL_SENDERS;
舉例來說,如果
max_replication_slots
參數設為10
,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量為 10 + 2 = 12。將 max_worker_processes 設為至少等於來源執行個體中的資料庫數量,加上執行個體上已使用的工作站程序數量。請使用下列指令,並將 MAX_WORKER_PROCESSES 取代為總數:
ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;
- 如果來源 PostgreSQL 執行個體是 Microsoft Azure Database for PostgreSQL Flexible Server,請執行下列動作,支援將資料從外部伺服器遷移至 Cloud SQL 執行個體:
使用下列指令設定
shared_preload_libraries
,加入pglogical
:ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
- 將
wal_level
設為logical
。詳情請參閱「Azure Database for PostgreSQL - Flexible Server 中的邏輯複製和邏輯解碼」。 將 max_replication_slots 設為來源執行個體可支援的複寫運算單元數量上限。使用下列指令,並將 MAX_REPLICATION_SLOTS 替換為該號碼:
ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;
Cloud SQL 會為每個遷移的資料庫各保留一個時段。至少要指定預期連線的訂閱項目數量,並預留一些空間供資料表同步處理。
舉例來說,如果來源執行個體有 5 個資料庫,且為來源建立 2 項遷移工作,那麼除了已使用的複製作業運算單元數量外,複製作業運算單元至少還須有 5 * 2 = 10 個。
請將 max_wal_senders 設為至少與
max_replication_slots
相同,再加上執行個體上已使用的傳送者數量。使用下列指令,並將 MAX_WAL_SENDERS 改為同時執行的 WAL 傳送程序總數:ALTER SYSTEM SET max_wal_senders = MAX_WAL_SENDERS;
舉例來說,如果
max_replication_slots
參數設為10
,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量為 10 + 2 = 12。將 max_worker_processes 設為至少等於來源執行個體中的資料庫數量,加上執行個體上已使用的工作站程序數量。請使用下列指令,並將 MAX_WORKER_PROCESSES 取代為總數:
ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;
- 將 azure.extensions 設為包含
pglogical
。 詳情請參閱「Azure Database for PostgreSQL - Flexible Server 中的伺服器參數」。
- 如果 Cloud SQL 副本將使用私人 IP,請設定外部伺服器的防火牆,允許為副本虛擬私有雲網路的私人服務存取權分配的內部 IP 範圍。
- 如要套用設定變更,請重新啟動來源執行個體。
選項 1:授予特定查詢的存取權,讓 Cloud SQL 外部伺服器追蹤複製延遲。使用具備
SUPERUSER
權限的使用者,執行下列操作:定義下列函式,允許外部伺服器查詢複製延遲。
CREATE OR REPLACE FUNCTION pg_stat_replication_user() RETURNS TABLE ( pid integer , usesysid oid , username name , application_name text , client_addr inet , client_hostname text , client_port integer , backend_start timestamp with time zone , backend_xmin xid , state text , sent_location pg_lsn , write_location pg_lsn , flush_location pg_lsn , replay_location pg_lsn , sync_priority integer , sync_state text ) LANGUAGE SQL SECURITY DEFINER AS $$ SELECT * FROM pg_catalog.pg_stat_replication; $$;
執行下列指令,將
EXECUTE
權限授予使用者:REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;
GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
方法 2:直接將
SUPERUSER
權限授予用於連線至來源執行個體的使用者。外部伺服器即可直接讀取複製延遲。選項 3:使用下列查詢,獨立追蹤複寫延遲:
SELECT current_timestamp, application_name, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.sent_location) AS sent_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.write_location) AS write_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.flush_location) AS flush_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.replay_location) AS replay_location_lag FROM pg_stat_replication WHERE application_name like 'cloudsql%';
如果選擇這個選項,Cloud SQL 不會在圖表或 API 回應中反映複製延遲指標。
- 地端部署來源:範本資料庫
template0
和template1
- Amazon RDS 來源:
template0
、template1
和rdsadmin
- Cloud SQL 來源:範本資料庫
template0
和template1
如要安裝
pglogical
擴充功能,請在來源執行個體上的每個資料庫執行下列指令:CREATE EXTENSION IF NOT EXISTS pglogical
如果資料表沒有主鍵,Cloud SQL 支援在變更資料擷取 (CDC) 階段遷移初始快照和
INSERT
陳述式。手動遷移UPDATE
和DELETE
陳述式。連線至執行個體,並執行下列指令,為各個遷移的資料庫和預設的
postgres
資料庫設定使用者權限。您用來連線至來源執行個體的使用者,會設為「連線設定檔」頁面中的使用者。您可以建立新使用者,或是重複使用現有使用者。
在每個待遷移資料庫的所有結構定義中 (資訊結構定義和開頭為
pg_
的結構定義除外),執行下列指令:GRANT USAGE on SCHEMA schema to username; GRANT SELECT on ALL SEQUENCES in SCHEMA schema to username; GRANT SELECT on ALL TABLES in SCHEMA schema to username;
在每個要遷移的資料庫上,執行下列指令:
GRANT USAGE on SCHEMA pglogical to PUBLIC;
如要取得來源資料庫的複製資訊,請在所有資料庫上執行下列指令:
GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;
如果來源為 Amazon RDS,請執行下列指令:
GRANT rds_replication to username;
如果來源是 Microsoft Azure Database for PostgreSQL 14 之前的版本,請執行下列指令:
GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;
您可以忽略
pglogical.node
介面上顯示的錯誤。如果來源是 Microsoft Azure Database for PostgreSQL 14 以上版本,請執行下列指令:
GRANT pg_read_all_data to username;
否則,請執行下列指令:
ALTER USER username with REPLICATION;
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 發生變更。
- 您想使用其他 PostgreSQL 複製使用者。
- PostgreSQL 複製使用者的密碼變更。
- 用於安全連線至外部伺服器的 SSL 憑證已變更。
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 找出要建立的副本,然後點按做為副本上層的副本「副本」分頁標籤。
- 按一下「建立備用資源」。
- 在「Create read replica」(建立唯讀備用資源) 頁面中,更新執行個體 ID 和其他任何設定選項,包括名稱、地區和區域。
- 按一下「建立」,
Cloud SQL 會建立備用資源。您會返回上層副本的執行個體頁面。
- 針對要建立的每個新連鎖副本,重複執行步驟 4 到 6。
- 使用
--master-instance-name
標記將 Cloud SQL 副本指定為主要執行個體,藉此建立新的副本: - REPLICA_NAME:您要建立的副本專屬 ID
- PARENT_REPLICA_NAME:Cloud SQL 備用資源的名稱
建立備用資源後,您會發現對主要執行個體所做的變更,會透過連鎖備用資源鏈中的所有備用資源進行複製。
- 如要在父項副本下建立副本,請編輯下列 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"
- 將備用資源升級為主要執行個體。
- 在執行個體中新增唯讀備用資源。
- 選用步驟:設定高可用性 (HA) 的執行個體。
如要避免額外停機,您可以在設定副本時啟用 HA,方法是將
AVAILABILITY_TYPE
設為REGIONAL
。 如果您在外部來源資料庫上安裝 Cloud SQL 不支援的擴充功能,將資料庫遷移至目的地執行個體時,Cloud SQL 不會遷移這些擴充功能。為確保順利遷移,請確認沒有任何物件或應用程式參照擴充功能。建議您先移除擴充功能,以及來源資料庫中的所有參照,再繼續進行遷移。
如要進一步瞭解 Cloud SQL 支援的擴充功能,請參閱「設定 PostgreSQL 擴充功能」。
如果您在外部來源資料庫上安裝
pg_cron
擴充功能,將資料庫遷移至目的地執行個體時,Cloud SQL 不會遷移擴充功能或與擴充功能相關聯的任何cron
設定。遷移資料庫並升級副本後,Google 建議您在每個遷移的資料庫上重新啟用pg_cron
擴充功能。您無法將資料從來源 Microsoft Azure 伺服器第 11 版遷移至目的地 PostgreSQL 適用的 Cloud SQL 執行個體第 11 版。如要解決這個問題,請將資料遷移至版本為 12 以上的 Cloud SQL 執行個體。
安裝 Google Cloud SDK
如要設定複製功能,請為外部伺服器安裝 Google Cloud SDK。除非 SDK 已安裝在其他位置,否則您可能需要在外部伺服器上安裝 SDK。
設定外部伺服器以進行複製
Cloud SQL 支援持續從來源資料庫遷移至 Cloud SQL 目的地資料庫。
PostgreSQL 支援的來源資料庫如下:
設定來源時,您必須一併設定來源執行個體和基礎來源資料庫。
外部伺服器檢查清單
如果 Cloud SQL 副本已啟用私人 IP 位址,但傳出的私人 IP 位址不是靜態,請設定外部伺服器的防火牆,允許為 Cloud SQL 副本使用的虛擬私有雲網路私人服務存取權分配的內部 IP 範圍,做為私人網路。
您必須設定來源資料庫伺服器的防火牆,允許整個內部 IP 範圍,該範圍是為虛擬私有雲網路的私人服務連線所分配,而 Cloud SQL 目的地執行個體會將該範圍做為 ipConfiguration 設定的 privateNetwork 欄位。
如要找出內部 IP 範圍,請按照下列步驟操作:
設定來源執行個體
如要設定來源執行個體,請按照下列步驟操作:
您在本步驟中設定的參數會套用至正在執行的 PostgreSQL 資料庫伺服器。您也可以將這些變更納入 postgresql.conf
檔案,讓變更永久生效。
為 9.6 之前的 PostgreSQL 版本啟用複製延遲監控功能
如果從低於 9.6 的 PostgreSQL 版本遷移,則預設無法使用複製延遲指標。您可以透過下列三種替代方式追蹤這項指標,確保資料庫升級期間的停機時間最短:
設定來源資料庫
Cloud SQL 外部伺服器會遷移來源執行個體中的所有資料庫,但下列資料庫除外:
在來源執行個體中,針對上述清單未列出的各個資料庫執行下列操作:
設定來源代表執行個體
來源代表執行個體會參照外部伺服器。其中只包含來自外部伺服器的要求資料。建立要求資料,並在 curl
指令中使用該資料,在 Cloud SQL 中建立來源表示法執行個體。
建立要求資料
要求資料包含外部伺服器的基本資訊 (JSON 格式)。您可以為公開或私有網路上的 Cloud SQL 副本設定要求資料,且資料應包含這項資訊。
如要將來源代表執行個體中的部分資料庫遷移至目的地 Cloud SQL 執行個體,請使用selectedObjects
參數指定資料庫名稱。如未使用這個參數,或提供空白清單做為參數值,系統會將所有資料庫從來源遷移至目的地。
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "selectedObjects": "SELECTED_OBJECTS", "hostPort": "SOURCE_HOST", "username": "USERNAME", "password": "PASSWORD", "caCertificate": "SOURCE_CERT", "clientCertificate": "CLIENT_CERT", "clientKey": "CLIENT_KEY" } }
受管理匯入作業範例
// 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": "POSTGRES_9_6",
"onPremisesConfiguration": {
"selectedObjects":[{"database":"db1"}, {"database":"db2"}],
"hostPort": "192.0.2.0:3306",
"username": "replicationUser",
"password": "486#@%*@"
}
}
屬性 | 說明 |
---|---|
SOURCE_NAME | 要建立的來源表示法執行個體名稱。 |
REGION | 您要讓來源表示法執行個體所在的區域。 |
DATABASE_VERSION | 外部伺服器上執行的資料庫版本。選項包括 POSTGRES_9_6 、POSTGRES_10 、POSTGRES_11 、POSTGRES_12 、POSTGRES_13 、POSTGRES_14 、POSTGRES_15 、POSTGRES_16 或 POSTGRES_17 。 |
SELECTED_OBJECTS | 以半形逗號分隔的資料庫清單,這些資料庫會從來源代表執行個體遷移至目的地 Cloud SQL 執行個體。 |
SOURCE HOST | 外部伺服器的 IPv4 位址和連接埠,或是外部伺服器的 DNS 位址。如果外部伺服器是託管在 Cloud SQL 上,則通訊埠為 5432 。 |
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 中的執行個體。
selectedObjects
參數相關聯的資料庫名稱清單。如未使用這個參數,或提供空白清單做為參數值,系統會將所有資料庫從來源遷移至目的地。
以下範例說明如何使用不同的使用者名稱和密碼更新 username
和 password
欄位:
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "selectedObjects": "SELECTED_OBJECTS", "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": "POSTGRES_9_6",
"onPremisesConfiguration": {
"selectedObjects":[{"database":"db1"}, {"database":"db3"}],
"username": "newReplicationUser",
"password": "525#@%*@"
}
}
屬性 | 說明 |
---|---|
SOURCE_NAME | 來源表示法執行個體的名稱。 |
REGION | 來源表示法執行個體所在的區域。 |
DATABASE_VERSION | 外部伺服器上執行的資料庫版本。選項包括 POSTGRES_9_6 、POSTGRES_10 、POSTGRES_11 、POSTGRES_12 、POSTGRES_13 、POSTGRES_14 、POSTGRES_15 、POSTGRES_16 或 POSTGRES_17 。 |
SELECTED_OBJECTS | 以半形逗號分隔的資料庫清單 (已更新),這些資料庫會從來源代表執行個體遷移至目的地 Cloud SQL 執行個體。 |
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": "POSTGRES_16", "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 副本使用的資料庫版本。這個版本的選項為 POSTGRES_9_6 、POSTGRES_10 、POSTGRES_11 、POSTGRES_12 、POSTGRES_13 、POSTGRES_14 、POSTGRES_15 、POSTGRES_16 或 POSTGRES_17 。
與外部伺服器上執行的資料庫版本相符,或將值設為不超過一個版本。 |
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:5432 |
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 執行個體。詳情請參閱「使用代管匯入功能來設定從外部資料庫的複製作業」。
監控備用資源
Cloud SQL 備用資源完成初始資料載入後,會連線至外部伺服器,並套用匯出作業後的所有更新。確認複製狀態。
將副本升級為獨立執行個體前,請務必先檢查複製狀態。如果複製程序未順利完成,升級的副本就不會包含外部伺服器的所有變更。
如果複製延遲時間並未趨近於 0,請採取步驟解決問題。建議您查看下列指標:/postgresql/external_sync/initial_sync_complete
、postgresql/external_sync/max_replica_byte_lag
和 database/replication/state
。查看 Cloud SQL 指標清單。
如要將來源代表執行個體中的部分資料庫遷移至目的地 Cloud SQL 執行個體,請檢查下列各資料庫指標:
指標 | 說明 |
---|---|
per_database/postgresql/external_sync/initial_sync_complete |
瞭解資料庫的遷移階段。如果這個指標的值為 0 ,表示資料庫仍屬於初始資料傾印的一部分。如果值為 1 ,表示資料庫已完成初始資料轉儲,目前處於變更資料擷取 (CDC) 階段。 |
per_database/postgresql/external_sync/replication_byte_lag |
瞭解資料庫的複製延遲 (以位元組為單位)。 |
Cloud SQL 備用資源趕上外部伺服器,且 Cloud SQL 備用資源沒有複製延遲後,請連線至資料庫。執行適當的資料庫指令,確保內容與外部伺服器比較時符合預期。請保留外部伺服器,直到完成必要驗證為止。
設定層疊式備用資源
遷移完成後,您可以先在 Cloud SQL 備用資源下建立串聯式唯讀備用資源,再升級 Cloud SQL 備用資源。
如要建立連鎖副本,請執行下列指令:
主控台
gcloud
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PARENT_REPLICA_NAME \
curl
推送備用資源
請按照下列步驟升級副本: