有没有一种方法可以从第一代云sql迁移到第二代,且停机时间极短甚至没有?
在我将其设置为只读(对我来说意味着宕机时间)之后,转储第一代数据库大约需要30分钟(我认为这意味着停机),而且我相信导入第二代数据库也将花费很长时间。
在升级过程中以及升级完成后使用克隆副本将差异复制到新数据库怎么样?
我使用的是AppEngine,因此我在考虑上传指向第二代数据库的新版本,而旧版本则指向克隆版本。
升级完成后,我将更改版本并运行脚本以复制丢失的数据。
那行得通吗?还有更好的选择吗?
最佳答案
我最终做了以下工作:
创建第二代实例
在计算引擎中创建临时计算机
SSH到临时计算机并获取计算机的IP:https://askubuntu.com/questions/95910/command-for-determining-my-public-ip
授予对新旧数据库实例的IP地址的访问权限
在第一代实例中设置用户名和密码(在下面的脚本中输入)
上载配置为使用第二代第二代数据库的新版本的App Engine应用程序,但不要将其设置为默认版本
在ssh的临时计算机中编辑并运行以下脚本
该脚本将要求确认只读标志
在脚本运行时,数据库将处于只读模式,从而导致应用程序停机
脚本成功完成后,将应用引擎的默认版本更改为指向使用新的第二代数据库的新版本
这给了我们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
关于mysql - Google Cloud SQL从第一代迁移到第二代,停机时间极少,甚至没有停机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41166472/