1

有沒有一種方法可以從第一代雲端SQL遷移到第二代,並且停機時間最短?谷歌雲sql從第一代遷移到第二代,停機時間從最小到無需

傾倒我的第一代DB約需30 mintues後,我將它設置爲只讀(意爲我的停機時間),我相信導入到第二代將需要很長的時間也是如此。

怎麼樣使用克隆,而在升級過程中,當升級完成複製的差異到新的數據庫?

我使用AppEngine上,所以我在想上傳指着第二代DB而老版本所指向的克隆一個新版本。 升級完成後,我將更改版本並運行腳本以複製缺失的數據。

莫非這項工作?有更好的選擇嗎?

+1

如果您正在使用雲SQL的出口數據操作來轉儲你的第一代DB數據,雲SQL它使用mysqldump的' --single-transaction'標誌,所以你可能不需要將你的數據庫設置爲只讀,你應該獲得一個一致的數據視圖。此外,第二代的性能更好,因此可能導入速度更快,您應該先測試一下。 –

+0

感謝您的回答。它在文檔中說:'你必須使用mysqldump來執行導出。您無法使用Google Cloud Platform Console提供的導出功能,因此無法使用。這裏是鏈接:https://cloud.google.com/sql/docs/migrate-2nd-gen – bentzy

回答

0

最後我做了以下內容:

  1. 創建第二代實例
  2. 創建計算引擎
  3. ssh來臨時機臨時機器並機器的IP:https://askubuntu.com/questions/95910/command-for-determining-my-public-ip
  4. 給訪問的IP地址上新的和舊的數據庫實例
  5. 設置用戶名和密碼的第一代實例(輸入它下面的腳本)
  6. 上傳配置爲使用新的第二代DB你的App Engine應用程序的新版本,但不將其設置爲默認版本
  7. 編輯&在SSH
  8. 腳本運行下面的臨時機腳本將要求確認只讀標誌
  9. 當腳本運行DB會以只讀模式造成的停機時間爲您的應用
  10. 一旦腳本完成成功改變應用程序引擎的默認版本,以點到使用新的第二代DB的新版本
  11. 這給了我們15分鐘的停機時間

下面是腳本:

#!/bin/sh 

DB_IP=127.0.0.1 
SQL_FILE_NAME=db-backup.sql 
GZ_SQL_FILE_NAME=db-backup.sql.gz 
BUCKET_NAME=gs://db-bucket-name 
GS_FILE_PTH=$BUCKET_NAME/$GZ_SQL_FILE_NAME 
INSTANCE_NAME=1st-gen-instance 
NEW_INSTANCE_NAME=2nd-gen-instace 

gcloud config set project project-name 
gcloud sql instances patch $INSTANCE_NAME --database-flags read_only=on 
mysqldump --databases dbname -h $DB_IP -u user --password=password \ 
--hex-blob --skip-triggers --set-gtid-purged=OFF \ 
--default-character-set=utf8 > $SQL_FILE_NAME 
gzip $SQL_FILE_NAME 
gsutil cp -r $GZ_SQL_FILE_NAME $GS_FILE_PTH 
SERVICE_ACCOUNT_ADDRESS=$(gcloud sql instances describe $NEW_INSTANCE_NAME | sed -n -e 's/^.*serviceAccountEmailAddress: //p') 
gsutil acl ch -u $SERVICE_ACCOUNT_ADDRESS:W $BUCKET_NAME 
gsutil acl ch -u $SERVICE_ACCOUNT_ADDRESS:R $GS_FILE_PTH 
gcloud sql instances import $NEW_INSTANCE_NAME $GS_FILE_PTH 
gsutil acl ch -d $SERVICE_ACCOUNT_ADDRESS:W $BUCKET_NAME 
gsutil acl ch -d $SERVICE_ACCOUNT_ADDRESS:R $GS_FILE_PTH 
相關問題