本頁面說明如何建立設定,將資料從來源資料庫伺服器複製到 MySQL 副本。
來源資料庫伺服器可以是符合所有伺服器必要條件的任何 MySQL 伺服器,包括 Cloud SQL 執行個體。在其他雲端服務業者託管的執行個體,只要符合必要條件 (包括支援 GTID),也可做為資料來源。
相關設定的詳細說明,請參閱從外部伺服器複製資料的相關說明。
事前準備
在您設定從外部伺服器複製資料之前,必須先完成以下步驟:
- 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. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Cloud SQL Admin API. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- 安裝並驗證 gcloud CLI。
- 確認伺服器符合來源資料庫伺服器的需求。
- 判斷主要執行個體與副本之間的連線需要哪種安全等級,並取得必要的憑證檔案。
- 決定要使用哪個Google Cloud 地區來存放 Cloud SQL 備用資源。
- 
  組合來源資料庫伺服器相關必要資訊: - 外部 IPv4 位址和通訊埠編號 - MySQL 預設使用通訊埠 3306。 
- MySQL 複製使用者帳戶和密碼
- MySQL 版本號碼
- 所有必要 SSL/TLS 憑證和金鑰的位置,視您選取的安全性層級而定
 
- 準備好為來源資料庫伺服器更新網路防火牆,以接受 Cloud SQL 備用資源的連線。 - 這項步驟必須在建立備用資源後的 30 分鐘內完成。 
- 
    如果您不是專案擁有者,則必須具備 Storage Admin角色。
來源資料庫伺服器的必要條件
從外部伺服器複製到 Cloud SQL 副本之前,請確認來源資料庫伺服器符合下列設定需求:
- 執行 MySQL Community Edition 版本 5.6 或 5.7。 
- 已啟用二進位檔記錄。 瞭解詳情。 
- 二進位檔記錄長時間保留,足以讓備用資源能完成匯入。 - 一般來說,一週就足夠。 進一步瞭解設定二進位檔記錄的保留政策。 
- 使用以列為單位的二進位記錄。 瞭解詳情。 
- GTID 已啟用,且強制確保 GTID 的一致性。 - 進一步瞭解 GTID。查看強制執行 GTID 一致性的選項。 
- 所有資料表 (系統資料庫中的資料表除外) 均使用 InnoDB 儲存引擎。 
- MySQL 使用者帳戶具有 - REPLICATION_SLAVE權限。- 請將這個帳戶設為接受從任何位置建立的連線 (host = - %)。您可以在後續步驟中設定只有該名使用者具備存取權。請勿將這個使用者帳戶用於複製以外的任何用途。
- 外部可存取的 IPv4 位址和 TCP 通訊埠。 
設定程序
如要設定從外部資料庫伺服器複製,請執行下列步驟:
1. 為您的資料建立 Cloud Storage 值區
建立在匯出程序中暫時保留資料的值區,或使用現有值區。
如要進一步瞭解如何建立值區,請參閱建立儲存空間值區一文。如要進一步瞭解 Storage Admin 角色,請參閱 Cloud Storage IAM 角色。
2. 將資料匯出至 Cloud Storage
備用資源會在 Cloud Storage 中尋找自己的資料,因此請將伺服器資料的複本放在這裡。您可以在匯出後繼續接受對伺服器的寫入作業。備用資源在匯入傾印檔案之後,就會開始處理匯出之後的所有變更,最後會讓自己的資料與主要執行個體的資料一致。
請在已安裝 gcloud CLI,且能夠連線至您 MySQL 伺服器的機器上,執行下列指令:
mysqldump \
    -h [PRIMARY_INSTANCE_IP] -P [PRIMARY_INSTANCE_PORT] -u [USERNAME] -p \
    --databases [DBS]  \
    --hex-blob  --skip-triggers  --master-data=1  \
    --order-by-primary --no-autocommit \
    --default-character-set=utf8mb4 \
    --single-transaction --set-gtid-purged=on | gzip | \
    gcloud storage cp - gs://[BUCKET]/[PATH_TO_DUMP]
If the source of the migration is a Relational Database Service (RDS) for MySQL,
the master-data flag is not supported and should not be specified.
This command might look like the following example:
mysqldump \
    -h [PRIMARY_INSTANCE_IP] -P [PRIMARY_INSTANCE_PORT] -u [USERNAME] -p \
    --databases [DBS]  \
    --hex-blob  --skip-triggers \
    --order-by-primary --no-autocommit \
    --default-character-set=utf8mb4 \
    --single-transaction --set-gtid-purged=on | gzip | \
    gcloud storage cp - gs://[BUCKET]/[PATH_TO_DUMP]
Additionally, you should configure RDS instances to retain binlogs for a
a longer period of time.
This command might look like the following example:
// Sets the retention period to one day.
call mysql.rds_set_configuration('binlog retention hours', 24);
將 [PROPERTIES_IN_BRACKETS] 替換成下列值:
| 屬性 | 值 | 
|---|---|
| [PRIMARY_INSTANCE_IP] | 來源資料庫伺服器的 IPv4 位址。 | 
| [PRIMARY_INSTANCE_PORT] | 來源資料庫伺服器的通訊埠。 | 
| [USERNAME] | MySQL 複製使用者帳戶。 | 
| [PASSWORD] | MySQL 複製使用者帳戶的密碼。 | 
| [DBS] | 來源資料庫伺服器上所有資料庫的清單 (以空格分隔),系統資料庫 ( sys、mysql、performance_schema和information_schema) 除外。請使用SHOW DATABASESMySQL 指令列出資料庫。 | 
| [BUCKET] | 您建立用來保留匯出檔案的值區名稱。 | 
| [PATH_TO_DUMP] | 匯出檔案的路徑。 | 
如果您看到部分傾印和 GTID 的相關警告,這是正常的。
這個指令可能如下列範例:
mysqldump \
    -h 192.0.2.1 -P 3306 -u replicationUser \
    --databases guestbook  \
    --hex-blob  --skip-triggers  --master-data=1  \
    --order-by-primary --no-autocommit \
    --default-character-set=utf8mb4 \
    --single-transaction --set-gtid-purged=on | gzip | \
    gcloud storage cp - gs://export-bucket/hq-primary1.sql.gz
3. 建立複製設定
如果備用資源使用私人 IP,來源資料庫伺服器必須設定為可從備用資源的 VPC 存取。只有 gcloud CLI 和 Cloud SQL Admin API 支援在私人虛擬私有雲中建立副本。
主控台
這個步驟會建立 Cloud SQL 備用資源和來源代表執行個體。
- 在 Google Cloud 控制台中開啟 Cloud SQL 執行個體清單。 
- 在按鈕列點選 [Migrate data] (遷移資料),開啟 Cloud SQL Migration Assistant。 
- 按一下 [Begin migration] (開始遷移)。 
- 在「Source database name」(來源資料庫名稱) 欄位,為 Cloud SQL 中的複製設定提供名稱。 - 這個名稱是設定的參照,請使用任何有效的 Cloud SQL 執行個體名稱。 
- 輸入來源資料庫伺服器的 IP 位址和通訊埠編號。 
- 提供用來連線複製作業的 MySQL 使用者名稱和密碼。 
- 選取來源資料庫伺服器的 MySQL 版本。 
- 如果您在備用資源和來源資料庫伺服器之間的連線使用 SSL/TLS (建議),請選取 [Enable SSL/TLS security] (啟用 SSL/TLS 安全性),並為您的來源伺服器提供 SSL/TLS 憑證資訊。 - 如要進一步瞭解 SSL/TLS 選項,請參閱 SSL/TLS 選項一節。 
- 點選 [繼續],然後填入備用資源的詳細資料。 - 為了確保匯入作業盡可能有效率地進行,請為備用資源設定大約能容納資料庫的儲存空間。請選擇大小類似來源伺服器的核心和記憶體。 
- 提供您之前上傳至 Cloud Storage 的傾印檔案路徑。 
- 按一下 [Create] (建立) 以建立備用資源。 
- 點選「下一步」。 
gcloud
- 建立來源代表執行個體。 - gcloud beta sql instances create [REPLICA_NAME] \ --region=[REGION] --database-version=[MYSQL_VERSION] \ --source-ip-address=[SOURCE_IP] --source-port=[SOURCE_PORT]- 如果副本使用私人 IP 位址,請一併新增: --network=[VPC_NETWORK_NAME] - 將 - [PROPERTIES_IN_BRACKETS]替換成下列值:- 屬性 - 值 - [SOURCE_REPRESENTATION_NAME]- 來源代表執行個體的名稱。使用任何有效的 Cloud SQL 執行個體名稱。 - [REGION]- 您要存放 Cloud SQL 備用資源的區域。 - [MYSQL_VERSION]- 在您的來源資料庫伺服器上執行的 MySQL 版本: - MYSQL_5_6或- MYSQL_5_7。- [SOURCE_IP]- 來源資料庫伺服器的外部可存取 IPv4 位址。 - [SOURCE_PORT]- 來源資料庫伺服器的外部可存取通訊埠。 
- 建立 Cloud SQL 備用資源。 - gcloud beta sql instances create [REPLICA_NAME] \ --master-instance-name=[SOURCE_REPRESENTATION_NAME] \ --master-username=[USERNAME] --prompt-for-master-password \ --master-dump-file-path=gs://[BUCKET]/[PATH_TO_DUMP] \ --master-ca-certificate-path=[SOURCE_SERVER_CA_PATH] \ --client-certificate-path=[CLIENT_CERT_PATH] \ --client-key-path=[PRIVATE_KEY_PATH] \ --tier=[MACHINE_TYPE] --storage-size=[DISK_SIZE]- 如果副本使用私人 IP 位址,請一併新增: --network=[VPC_NETWORK_NAME] - 將 - [PROPERTIES_IN_BRACKETS]替換成下列值:- 屬性 - 值 - [REPLICA_NAME]- Cloud SQL 唯讀備用資源的名稱。使用任何有效的 Cloud SQL 執行個體名稱。 - [SOURCE_REPRESENTATION_NAME]- 您在之前步驟建立的來源代表執行個體名稱。 - [USERNAME]- 來源資料庫伺服器上的 MySQL 複製使用者帳戶。 - [BUCKET]- 您建立用來保留匯出檔案的值區名稱。 - [PATH_TO_DUMP]- 匯出檔案的路徑。 - [SOURCE_SERVER_CA_PATH]- 儲存來源資料庫伺服器 CA 憑證的本機路徑。只有 SSL/TLS 需要。 - [CLIENT_CERT_PATH]- 儲存用戶端憑證的本機路徑。只有伺服器與用戶端驗證需要。 - [PRIVATE_KEY_PATH]- 儲存用戶端憑證私密金鑰檔案的本機路徑。只有伺服器與用戶端驗證需要。 - [MACHINE_TYPE]- 您備用資源的大小。一般來說,副本的大小與來源資料庫伺服器差不多。如果不確定要使用哪種機器類型,請先從 - db-custom-2-7680開始。之後如有需要可以變更大小。- [DISK_SIZE]- 副本的儲存空間大小 (GB)。為獲得最佳效能,請建立副本,並確保儲存空間足以容納整個匯入檔案。 - [VPC_NETWORK_NAME]- 虛擬私有雲,格式為:projects/[PROJECT_ID]/global/networks/[NETWORK_NAME] 
cURL
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": "[MYSQL_VERSION]",
         "onPremisesConfiguration": {
             "hostPort": "[SOURCE_SERVER_IP]:[SOURCE_SERVER_PORT]"
         }
     }' \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances
將 [PROPERTIES_IN_BRACKETS] 替換成下列值:
| 屬性 | 值 | 
|---|---|
| [SOURCE_REPRESENTATION_NAME] | 來源代表執行個體的名稱。使用任何有效的 Cloud SQL 執行個體名稱。 | 
| [REGION] | 您要存放 Cloud SQL 備用資源的區域。 | 
| [MYSQL_VERSION] | 在您的來源資料庫伺服器上執行的 MySQL 版本: MYSQL_5_6或MYSQL_5_7。 | 
| [SOURCE_SERVER_IP] | 來源資料庫伺服器的外部可存取 IPv4 位址。 | 
| [SOURCE_SERVER_PORT] | 來源資料庫伺服器的外部可存取通訊埠。 | 
| [PROJECT_ID] | Google Cloud 專案的專案 ID。 | 
舉例來說,如要為 IP 位址為 192.0.2.0 的來源資料庫伺服器建立名為 hq-primary1 的來源代表執行個體,該伺服器在 3306 連接埠上開啟,並執行 MySQL 5.7,適用於 MyProject 專案和 us-central1 區域中的 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": "hq-primary1",
         "region": "us-central1",
         "databaseVersion": "MYSQL_5_7",
         "onPremisesConfiguration": {
             "hostPort": "192.0.2.0:3306"
         }
     }' \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/MyProject/instances
2. 建立 Cloud SQL 副本
您在這個步驟中使用來源代表伺服器來代表來源資料庫伺服器,以建立 Cloud SQL 唯讀備用資源,並為備用資源提供先前步驟中載入 Cloud Storage 的資料。
由於這個 API 呼叫會要求您提供機密資訊,因此請使用 JSON 檔案提供資料給 cURL,而非使用指令列提供資料。
建立資料檔案:
{
    "replicaConfiguration": {
        "mysqlReplicaConfiguration": {
            "username": "[USERNAME]",
            "password": "[PASSWORD]",
            "dumpFilePath": "gs://[BUCKET]/[PATH_TO_DUMP]",
            "caCertificate": "[SOURCE_SERVER_CA]",
            "clientCertificate": "[CLIENT_CERT]",
            "clientKey": "[PRIVATE_KEY]"
        }
     },
     "settings": {
         "tier": "[MACHINE_TYPE]",
         "dataDiskSizeGb": "[DISK_SIZE]"
     },
     "masterInstanceName": "[SOURCE_REPRESENTATION_NAME]",
     "region": "[REGION]",
     "databaseVersion": "[MYSQL_VERSION]",
     "name": "[REPLICA_NAME]"
}
如果副本使用私人 IP 位址,請在設定中新增「ipConfiguration.privateNetwork」,值的格式為「projects/[PROJECT_ID]/global/networks/[NETWORK_NAME]」。
將 [PROPERTIES_IN_BRACKETS] 替換成下列值:
| 屬性 | 值 | 
|---|---|
| [USERNAME] | 來源資料庫伺服器上的 MySQL 複製使用者帳戶。 | 
| [PASSWORD] | MySQL 複製使用者帳戶的密碼。 | 
| [BUCKET] | 您建立用來保留匯出檔案的值區名稱。 | 
| [PATH_TO_DUMP] | 匯出檔案的路徑。 | 
| [SOURCE_SERVER_CA] | 來源資料庫伺服器的 CA 憑證。僅適用於 SSL/TLS。將憑證貼入要求內文。 | 
| [CLIENT_CERT] | 用戶端憑證。只有伺服器與用戶端驗證需要。將憑證貼入要求內文。 | 
| [PRIVATE_KEY] | 用戶端憑證的私密金鑰檔案。只有伺服器與用戶端驗證需要。將金鑰貼入要求本文。 | 
| [MACHINE_TYPE] | 您備用資源的大小。一般來說,副本的大小與來源資料庫伺服器差不多。如果不確定要使用哪種機器類型,請先從 db-custom-2-7680開始。之後如有需要可以變更大小。 | 
| [DISK_SIZE] | 副本的儲存空間大小 (GB)。為獲得最佳效能,請建立副本,並確保有足夠的儲存空間可容納整個匯入作業。 | 
| [SOURCE_REPRESENTATION_NAME] | 您之前建立的來源代表執行個體名稱。 | 
| [REGION] | 您建立來源代表執行個體的區域。唯讀備用資源必須與來源代表執行個體在同一個區域。 | 
| [MYSQL_VERSION] | 在您的來源資料庫伺服器上執行的 MySQL 版本: MYSQL_5_6或MYSQL_5_7。 | 
| [REPLICA_NAME] | Cloud SQL 唯讀備用資源的名稱。使用任何有效的 Cloud SQL 執行個體名稱。 | 
在指令列呼叫 API:
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @[PATH_TO_DATA_FILE] \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances
針對我們稍早建立的來源表示法執行個體和 bucket,資料檔案 data.json 可能如下所示:
{
    "replicaConfiguration": {
        "mysqlReplicaConfiguration": {
            "username": "replicationUser",
            "password": "486#@%*@",
            "dumpFilePath": "gs://export-bucket/hq-primary1.sql.gz",
            "caCertificate": "[SOURCE_SERVER_CA]",
            "clientCertificate": "[CLIENT_CERT]",
            "clientKey": "[PRIVATE_KEY]"
        }
    },
    "settings": {
        "tier": "db-custom-4-15360",
        "dataDiskSizeGb": "100"
    },
    "masterInstanceName": "hq-primary1",
    "region": "us-central1",
    "databaseVersion": "MYSQL_5_7",
    "name": "hq-primary1-replica1"
}
cURL 指令如下所示:
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./data.json
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/MyProject/instances
讀取副本可以存取傾印檔案時,就會開始匯入程序。 匯入程序所需時間取決於傾印檔案大小、副本機器類型和資料庫結構。根據估計的一般指南,預期備用資源每小時約匯入 25-50 GB。
在匯入程序完成前,副本會維持在 PENDING_CREATE 狀態,完成後則會變更為 RUNNABLE 狀態。
4. 設定接受備用資源連線的來源資料庫伺服器
備用資源必須連線到來源資料庫,才能複製成功。如果您的來源資料庫伺服器是在防火牆後或有一些其他網路限制,您必須使用備用資源的 OUTGOING IP 位址,為備用資源啟用網路存取權。請注意,這「不是」 Google Cloud 控制台中副本主要清單顯示的 IP 位址。您可以擷取 OUTGOING IP 位址,方法是將游標懸停在 IP 位址的「More info」(更多資訊) 工具提示上,或使用下方的 gcloud 指令。
- 擷取唯讀備用資源的 IP 位址: - gcloud sql instances describe [REPLICA_NAME] --format="default(ipAddresses)" 
- 視需要設定來源資料庫伺服器的網路防火牆,以便接受來自 OUTGOINGIP 位址的連線。
- 確認備用資源已成功連線至來源資料庫伺服器。 - 執行個體清單頁面中的副本圖示不再旋轉,且會顯示為綠色。
- 前往 Google Cloud 控制台的記錄檢視器。 
- 從「執行個體」下拉式選單中選取副本。
- 
        選取 replication-setup.log記錄檔。如果備用資源無法連線到來源資料庫伺服器,請確認下列項目: - 
              來源資料庫伺服器上的任何防火牆都已設定為允許來自副本 OUTGOINGIP 位址的連線。
- 您的 SSL/TLS 設定無誤。
- 您的複製使用者、主機和密碼正確無誤。
 
- 
              來源資料庫伺服器上的任何防火牆都已設定為允許來自副本 
 
5. 防止其他來源位址存取 MySQL 複製使用者
這並不是必要的步驟,但為了確保安全性,我們建議您這麼做。
來源資料庫伺服器上的 MySQL 複製使用者已設為接受來自任何主機的連線 (%)。請更新該使用者帳戶,只接受來自副本 OUTGOING IP 位址的連線:
    UPDATE mysql.user SET Host='[OUTGOING_IP]' WHERE Host='%' AND User='[USERNAME]';
    FLUSH PRIVILEGES;
6. 完成備用資源的設定
- 設定備用資源上的使用者帳戶。 - 您可以使用 Google Cloud 控制台、gcloud CLI 工具或 Cloud SQL API 完成這項操作。不過,您無法使用 - mysql用戶端。如要進一步瞭解 MySQL 使用者,請參閱 MySQL 使用者。- 如要使用 Google Cloud 控制台建立使用者,請按照下列步驟操作: - 前往 Google Cloud 控制台的 Cloud SQL 執行個體頁面。
 前往 Cloud SQL 執行個體頁面
- 按一下執行個體名稱,開啟「執行個體詳細資料」頁面。
- 選取 [使用者] 分頁標籤。
- 點選 [建立使用者帳戶]。
- 在「建立使用者帳戶」對話方塊中,,逐一指定使用者的各項資訊。
- 點選「建立」。
 
- 前往 Google Cloud 控制台的 Cloud SQL 執行個體頁面。
- 使用公開 IP 位址,從您打算用來連線至備用資源的任何用戶端,授予備用資源存取權。 - 如需操作說明,請參閱新增授權的位址或位址範圍一節。如要連線至副本,請使用副本的 - PRIMARYIP 位址。這個 IP 位址會顯示在 Google Cloud 控制台中。- 否則,您可以使用任何其他連線方法連線至副本。 
7. 確認複製狀態
備用資源匯入傾印檔案後,會連線至內部部署伺服器,並套用匯出後的所有更新。
將副本升級為獨立執行個體前,請務必 檢查複製狀態。如果複製程序未順利完成,升級的副本就不會包含外部執行個體的所有變更。
8. (選用) 將備用資源升級為獨立執行個體
檢查複製狀態後,如要完全取代 (「遷移」) 來源資料庫伺服器,請將備用資源升級為獨立的主要執行個體。備用資源成為主要執行個體後,就不會再連線至原始來源資料庫伺服器。
為新的主要執行個體建立新的備用資源,然後重新啟動連線應用程式,指向新的主要執行個體 (用於寫入作業) 或新的備用資源 (用於讀取作業)。
9. 清理儲存空間
- 刪除匯出的檔案: - gcloud storage rm gs://[BUCKET]/[PATH_TO_DUMP] 
- 如果您不再需要值區,請予以刪除: - gcloud storage rm gs://[BUCKET] --recursive 
如要進一步瞭解如何刪除物件及刪除值區,請參閱 Cloud Storage 說明文件。
更新設定
如要稍後更新設定,可以編輯來源代表例項。
如要更新內部部署設定,請注意 hostPort 和 type 無法更新。