Mysql 谷歌云sql从第一代迁移到第二代,停机时间最少甚至没有
有没有一种方法可以将第一代云sql迁移到第二代,而停机时间最少甚至没有 在我将第一代数据库设置为只读(这意味着停机)后,转储它大约需要30分钟,我相信导入第二代数据库也需要很长时间 在升级过程中以及升级完成后使用克隆如何将差异复制到新数据库 我正在使用AppEngine,所以我想上传一个指向第二代数据库的新版本,而旧版本指向克隆。 升级完成后,我将更改版本并运行脚本来复制丢失的数据Mysql 谷歌云sql从第一代迁移到第二代,停机时间最少甚至没有,mysql,google-app-engine,google-cloud-platform,google-cloud-sql,Mysql,Google App Engine,Google Cloud Platform,Google Cloud Sql,有没有一种方法可以将第一代云sql迁移到第二代,而停机时间最少甚至没有 在我将第一代数据库设置为只读(这意味着停机)后,转储它大约需要30分钟,我相信导入第二代数据库也需要很长时间 在升级过程中以及升级完成后使用克隆如何将差异复制到新数据库 我正在使用AppEngine,所以我想上传一个指向第二代数据库的新版本,而旧版本指向克隆。 升级完成后,我将更改版本并运行脚本来复制丢失的数据 那行吗?有更好的选择吗?我最后做了以下几点: 创建第二代实例 在计算引擎中创建临时计算机 Ssh到临时机器并获取机
那行吗?有更好的选择吗?我最后做了以下几点:
#!/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
我最后做了以下几件事:
#!/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
如果您使用Cloud SQL的导出数据操作转储第一代数据库数据,Cloud SQL将使用mysqldump
--single transaction
标志,因此您可能不需要将数据库设置为只读,并且您应该获得数据的一致视图。此外,第二代的性能更好,因此可能是导入速度更快,您应该在之前测试。感谢您的回答。文档中说:您必须使用mysqldump来执行导出。您无法使用谷歌云平台控制台提供的导出
,因此不可能。这里是链接:如果您使用Cloud SQL的导出数据操作转储第一代数据库数据,Cloud SQL它使用mysqldump--single transaction
标志,因此您可能不需要将数据库设置为只读,您应该获得数据的一致视图。此外,第二代的性能更好,因此可能是导入速度更快,您应该在之前测试。感谢您的回答。文档中说:您必须使用mysqldump来执行导出。您无法使用谷歌云平台控制台提供的导出
,因此不可能。以下是链接: