【问题标题】:Google cloud sql migrate from first generation to second generation with minimal to no downtime谷歌云 sql 从第一代迁移到第二代,停机时间最少甚至没有
【发布时间】:2017-05-01 04:36:55
【问题描述】:

有没有办法从第一代云 sql 迁移到第二代,且停机时间最短甚至没有?

在我将第一代数据库设置为只读后转储它大约需要 30 分钟(这对我来说意味着停机时间),而且我相信导入第二代也需要很长时间。

在升级过程中使用克隆以及在升级完成时将差异复制到新数据库会怎样?

我正在使用 AppEngine,所以我正在考虑上传指向第二代数据库的新版本,而旧版本指向克隆。 升级完成后,我将更改版本并运行脚本来复制丢失的数据。

这行得通吗?还有更好的选择吗?

【问题讨论】:

  • 如果您使用 Cloud SQL 的导出数据操作来转储您的第一代数据库数据,Cloud SQL 它使用 mysqldump --single-transaction 标志,因此您可能不需要将您的数据库设置为只读,您应该获得一致的数据视图。第二代的性能也更好,所以可能是导入会更快,你应该先测试一下。
  • 感谢您的回答。它在文档中说:You must use mysqldump to perform the export. You cannot use the export provided by Google Cloud Platform Console 所以这是不可能的。这是链接:cloud.google.com/sql/docs/migrate-2nd-gen

标签: mysql google-app-engine google-cloud-platform google-cloud-sql


【解决方案1】:

我最终做了以下事情:

  1. 创建第二代实例
  2. 在计算引擎中创建一个临时机器
  3. SSH 到临时机器并获取机器的 IP:https://askubuntu.com/questions/95910/command-for-determining-my-public-ip
  4. 授予对新旧数据库实例 IP 地址的访问权限
  5. 在第一代实例中设置用户和密码(在下面的脚本中输入)
  6. 上传配置为使用新的第二代数据库的应用引擎应用的新版本,但不要将其设置为默认版本
  7. 在 ssh 的临时机器中编辑并运行以下脚本
  8. 脚本会要求确认只读标志
  9. 当脚本运行时,数据库将处于只读模式,从而导致您的应用程序停机
  10. 脚本成功完成后,将应用引擎的默认版本更改为指向使用新第二代数据库的新版本
  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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多