設定外部備用資源

本頁面說明如何設定 Cloud SQL 執行個體,將資料複製到 Cloud SQL 外部的一或多個備用資源,以及如何在外部備用資源設定中降級主要執行個體,以便反轉設定。

如要進一步瞭解複製作業,請參閱「關於 Cloud SQL 中的複製作業」。

設定外部備用資源

事前準備

開始執行這項工作前,您必須具備符合外部複本的規定的 Cloud SQL 執行個體和外部 MySQL 執行個體。

設定主要執行個體

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
  2. 在主要執行個體上啟用外部複本的 IP 位址存取權。

    如要瞭解如何啟用 IP 存取權,請參閱「設定 IP 連線存取權」。

  3. 請記下主要執行個體的公開 IP 位址和公開傳出 IP 位址,以供日後使用。您可以在執行個體的「總覽」頁面中找到這些值。
  4. 按一下右上角的 Cloud Shell 圖示
  5. 在 Cloud Shell 提示中,使用內建的 MySQL 用戶端連線至主要執行個體:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=root
       
       
  6. 輸入根密碼。您應該會看見 mysql 提示。
  7. 建立用於複製的特殊使用者,並授予複製權限:
    CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD';
    GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
       
  8. 如果您要從新的資料庫開始,請在主要和備用資源執行個體上建立相同的資料庫和資料表。例如:
    CREATE DATABASE test;
    
    USE test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
  9. 如果主要執行個體已有資料庫,則必須在複本上建立相同的資料庫。如要執行這項操作,請將資料庫從主要執行個體匯出至 Cloud Storage 值區,然後匯入複本。進一步瞭解如何 將資料從 Cloud SQL 匯出至 Cloud Storage 中的 SQL 傾印檔案

設定外部備用資源

警告:這個程序會用主要執行個體的設定與資料,覆寫在備用資源的 MySQL 資料庫中託管的任何資料,包括使用者與密碼。
  1. 在託管備用資源的電腦上,使用從主要執行個體建立的匯出檔案,為新的外部 MySQL 例項播種。

    舉例來說,下列指令會載入名為 mydump.sql 的匯出檔案:

    mysql --user=root --password < mydump.sql
    
  2. 判斷此複本-主要執行個體組合的伺服器 ID。

    伺服器 ID 為數值 (例如「3」),這個數值在外部備用資源設定中不可重複 (每個備用資源都必須有專屬的伺服器 ID)。

  3. 將下列選項新增至複本的 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 複製作業選項,請參閱「複製作業和二進位記錄選項」。

  4. 重新啟動 mysqld 程序,讓系統讀取設定檔。
  5. 在複本的 mysql 用戶端中,輸入下列指令:
    CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',
    MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
    
  6. 開始對備用資源的複製:
    START SLAVE;
    
  7. 確認複製狀態:

    SHOW SLAVE STATUS\G;
    

    如果您看到「等候主要執行個體傳送事件」,表示複製正在進行中。

降級外部備用資源的主要執行個體

當您擁有一個含有外部備用資源的 Cloud SQL 執行個體後,可以透過反轉設定來進行以下變更:

  • 使外部備用資源成為新的主要執行個體。
  • 使 Cloud SQL 執行個體成為唯讀備用資源,而複製來源是舊稱外部備用資源的伺服器 (現稱做來源資料庫伺服器)。

如何反轉外部備用資源設定:

  1. 建立來源代表執行個體

    降級作業完成後,這個執行個體會代表來源資料庫伺服器,並連結至 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 備用資源的地區。

  2. 開始降級程序。

    由於這個 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 物件使用的屬性,請參閱「 從外部伺服器複製」一文。

  3. 等待外部複本完成主要執行個體的所有待處理交易。

    備用資源完成交易時,SHOW SLAVE STATUS 指令會把 Seconds Behind Master 顯示為 0,並且外部備用資源與 Cloud SQL 主要執行個體的 Executed_Gtid_Set 值會是相同的。

  4. 使用 mysql 用戶端停止在外部備用資源上進行複製:

    STOP SLAVE
    RESET SLAVE ALL
    
  5. 請等待 Cloud SQL 執行個體開始從外部伺服器 (即來源資料庫伺服器) 複製資料。

    在 Cloud SQL 執行個體上執行 SHOW SLAVE STATUS 指令,即可取得複製狀態。

  6. 當 Cloud SQL 執行個體成功從來源資料庫伺服器複製資料時,請將來源資料庫伺服器上的 read_only 旗標設為 off,並更新應用程式,指向來源資料庫伺服器。

疑難排解

問題 疑難排解
錯誤訊息:The slave is connecting ... master has purged binary logs containing GTIDs that the slave requires 主要 Cloud SQL 執行個體具有自動備份和二進位記錄,且已啟用時間點復原功能,因此應該會有足夠的記錄,讓複本能夠趕上。不過,在這種情況下,即使有二進位記錄檔,備援機制也不知道要從哪一列開始讀取。

使用正確的標記設定建立新的傾印檔案,然後使用該檔案設定外部複本

  1. 透過 Compute Engine 執行個體連線至 mysql 用戶端。
  2. 執行 mysqldump,並使用 --master-data=1--flush-privileges 標記。

    重要事項:請勿加入 --set-gtid-purged=OFF 旗標

    瞭解詳情

  3. 確認剛建立的傾印檔案包含 SET @@GLOBAL.GTID_PURGED='...' 行。
  4. 將轉儲檔案上傳至 Cloud Storage 值區,然後 使用轉儲檔案設定備用資源

後續步驟