我目前正在为我们公司的 CI/CD 管道添加一个额外的步骤,以便我们在进行可能在我们的数据库上运行迁移的部署之前备份数据库。
为了进行备份,我使用以下命令向 Google Cloud Platform 进行身份验证:
gcloud auth activate-service-account --key-file /path/to/keyfile.json
验证后我使用命令:
gcloud sql backups create --async --instance instance_name
我的问题是关于添加异步标志的含义是什么。我知道这样做意味着我的管道不会等待备份完成再继续下一步,但是,如果下一步涉及运行可能会破坏某些东西的迁移,这是否意味着我在上一步可能最终处于迁移已部分运行的中间状态?
谷歌实际上是如何处理备份创建的?他们是否在那个时间点对数据库进行快照,然后从中进行备份?删除 --async 标志以确保在运行任何潜在迁移之前完成备份会更安全吗?
我试过查看文档,但并没有真正详细说明这一点。
我们可以使用这些命令了解备份过程的状态:-
使用
gcloud sql operations list
命令获取操作 ID。使用
gcloud sql operations describe
命令获取操作的状态。 有关更多详细信息,请参见此处对于 --async 命令,请参阅google doc。看起来执行将返回到其他作业,并且备份将在后台继续。
我认为出于快照目的,最好不要使用--async,除非您确实确定 CI/CD 中的下一个操作不会干扰快照操作。
也就是说,我认为快照会完成,但是如果下一个操作与 cloudsql 实例或数据库有关,如果在快照运行的同时运行它,它将失败。
只是,作为一个例子:您不能同时通过gcloud sql export sql导出多个数据库。您必须等待第一次运行完成,否则第二次执行将失败!
希望这有帮助!