Google Cloud SQL从第一代迁移到第二代,最少到没有停机时间



有没有一种方法可以从第一代云SQL迁移到第二代,而没有停机时间?

倾倒我的第一代DB在我设置为仅阅读(对我来说意味着停机时间)之后,大约需要30个割草机,我相信将导入到第二代也将花费很长时间。

在进行升级时使用克隆又如何使用克隆,升级完成时,将差异复制到新的DB?

我正在使用附录,所以我正在考虑上传一个新版本,该版本指向第二代db时,旧版本指向克隆。升级完成后,我将更改版本并运行一个脚本以复制丢失的数据。

那可以起作用吗?有更好的选择吗?

我最终做了以下操作:

  1. 创建第二代实例
  2. 在计算引擎中创建临时机器
  3. ssh到达温度机并获取机器的IP:https://askubuntu.com/questions/95910/command-for-determining-my-public-ip-ip
  4. 在新的和旧的DB实例上访问IP地址
  5. 设置用户和密码在第一代实例中(在下面的脚本中输入)
  6. 上传您的应用引擎应用程序的新版本,该应用程序配置为使用新的第二代DB,但不要将其设置为默认版本
  7. 编辑&在ssh
  8. 的临时计算机中运行下面的脚本
  9. 脚本将要求仅确认读取标志
  10. 脚本运行时,DB将仅在读取模式下,为您的应用程序造成停机时间
  11. 脚本完成后,成功更改App Engine的默认版本,以指向使用新版本的新版本,该版本使用了新的第二代DB
  12. 这给了我们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

相关内容

  • 没有找到相关文章

最新更新