如要進一步瞭解複製作業,請參閱「關於 Cloud SQL 中的複製作業」。
設定外部備用資源
事前準備
開始執行這項工作前,您必須具備符合外部複本的規定的 Cloud SQL 執行個體和外部 MySQL 執行個體。
設定主要執行個體
- 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 在主要執行個體上啟用外部複本的 IP 位址存取權。
如要瞭解如何啟用 IP 存取權,請參閱「設定 IP 連線存取權」。
- 請記下主要執行個體的公開 IP 位址和公開傳出 IP 位址,以供日後使用。您可以在執行個體的「總覽」頁面中找到這些值。
- 按一下右上角的 Cloud Shell 圖示
。
- 在 Cloud Shell 提示中,使用內建的 MySQL 用戶端連線至主要執行個體:
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=root
- 輸入根密碼。您應該會看見 mysql 提示。
- 建立用於複製的特殊使用者,並授予複製權限:
CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD'; GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
- 如果您要從新的資料庫開始,請在主要和備用資源執行個體上建立相同的資料庫和資料表。例如:
CREATE DATABASE test; USE test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
- 如果主要執行個體已有資料庫,則必須在複本上建立相同的資料庫。如要執行這項操作,請將資料庫從主要執行個體匯出至 Cloud Storage 值區,然後匯入複本。進一步瞭解如何 將資料從 Cloud SQL 匯出至 Cloud Storage 中的 SQL 傾印檔案。
設定外部備用資源
警告:這個程序會用主要執行個體的設定與資料,覆寫在備用資源的 MySQL 資料庫中託管的任何資料,包括使用者與密碼。-
在託管備用資源的電腦上,使用從主要執行個體建立的匯出檔案,為新的外部 MySQL 例項播種。
舉例來說,下列指令會載入名為
mydump.sql
的匯出檔案:mysql --user=root --password < mydump.sql
- 判斷此複本-主要執行個體組合的伺服器 ID。
伺服器 ID 為數值 (例如「3」),這個數值在外部備用資源設定中不可重複 (每個備用資源都必須有專屬的伺服器 ID)。
- 將下列選項新增至複本的
my.cnf
選項檔案:[mysqld] server-id=[SERVER_ID] gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON replicate-ignore-db=mysql binlog-format=ROW log_bin=mysql-bin expire_logs_days=1 read_only=ON
如要進一步瞭解 MySQL 複製作業選項,請參閱「複製作業和二進位記錄選項」。
- 重新啟動
mysqld
程序,讓系統讀取設定檔。 - 在複本的
mysql
用戶端中,輸入下列指令:CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER', MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
- 開始對備用資源的複製:
START SLAVE;
確認複製狀態:
SHOW SLAVE STATUS\G;
如果您看到「等候主要執行個體傳送事件」,表示複製正在進行中。
降級外部備用資源的主要執行個體
當您擁有一個含有外部備用資源的 Cloud SQL 執行個體後,可以透過反轉設定來進行以下變更:
- 使外部備用資源成為新的主要執行個體。
- 使 Cloud SQL 執行個體成為唯讀備用資源,而複製來源是舊稱外部備用資源的伺服器 (現稱做來源資料庫伺服器)。
如何反轉外部備用資源設定:
-
建立來源代表執行個體。
降級作業完成後,這個執行個體會代表來源資料庫伺服器,並連結至 Cloud SQL 備用資源。
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data '{ "name": "SOURCE_REPRESENTATION_NAME", "region": "REGION", "databaseVersion": "EXTERNAL_SERVER_DATABASE_VERSION", "onPremisesConfiguration": { "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT" } }' \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
使用您要存放 Cloud SQL 備用資源的地區。
開始降級程序。
由於這個 API 呼叫會要求您提供機密資訊,因此您應該使用 JSON 檔案提供資料給 cURL,而非使用指令列提供資料。
建立資料檔案:
{ "demoteMasterContext": { "replicaConfiguration": { "mysqlReplicaConfiguration": { "username": "REPLICATION_USERNAME", "password": "PASSWORD", "caCertificate": "EXTERNAL_SERVER_CA", "clientCertificate": "CLIENT_CERT", "clientKey": "PRIVATE_KEY" } }, "masterInstanceName": "SOURCE_REPRESENTATION_NAME", }, }
然後,呼叫 API。
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @PATH_TO_DATA_FILE \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMaster
如要進一步瞭解 SSL/TLS 選項,請參閱「SSL/TLS 選項」一節。如要進一步瞭解
replicaConfiguration
物件使用的屬性,請參閱「 從外部伺服器複製」一文。-
等待外部複本完成主要執行個體的所有待處理交易。
備用資源完成交易時,
SHOW SLAVE STATUS
指令會把Seconds Behind Master
顯示為 0,並且外部備用資源與 Cloud SQL 主要執行個體的Executed_Gtid_Set
值會是相同的。 使用
mysql
用戶端停止在外部備用資源上進行複製:STOP SLAVE RESET SLAVE ALL
請等待 Cloud SQL 執行個體開始從外部伺服器 (即來源資料庫伺服器) 複製資料。
在 Cloud SQL 執行個體上執行
SHOW SLAVE STATUS
指令,即可取得複製狀態。-
當 Cloud SQL 執行個體成功從來源資料庫伺服器複製資料時,請將來源資料庫伺服器上的
read_only
旗標設為off
,並更新應用程式,指向來源資料庫伺服器。
疑難排解
問題 | 疑難排解 |
---|---|
錯誤訊息:The slave is connecting ... master has purged
binary logs containing GTIDs that the slave requires 。 |
主要 Cloud SQL 執行個體具有自動備份和二進位記錄,且已啟用時間點復原功能,因此應該會有足夠的記錄,讓複本能夠趕上。不過,在這種情況下,即使有二進位記錄檔,備援機制也不知道要從哪一列開始讀取。 使用正確的標記設定建立新的傾印檔案,然後使用該檔案設定外部複本
|