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 
相关问题