描述“备份完整性校验和”失败时的回退流程。
解读
在国内金融、政企及互联网核心场景,备份完整性校验失败被视为P0级故障,必须在分钟级内完成决策。面试官想确认两点:
- 你是否清楚 Cloud SQL 的三层校验机制(对象级 CRC32C、存储级哈希、逻辑级导出校验)。
- 当三层之一失败,你能否给出可落地的回退路径,而不是简单“再跑一次”。
回答时要体现“先恢复业务、再定位根因、最后补齐数据”的SRE 黄金三角原则,并兼顾国内合规(等保、银监)对可审计、可回退的硬性要求。
知识点
- Cloud SQL 自动备份链:每日一次自动备份 + 连续 7~30 天保留 + 事务日志实时上传至双区域 GCS 桶。
- 校验和触发时机:备份文件上传完成后,由 Google 内部 Cron 触发 CRC32C 比对;若失败,Cloud SQL 控制台事件流会抛出
BACKUP_INTEGRITY_CHECK_FAILED告警。 - 国内常用对接:告警通过 Pub/Sub → Cloud Functions → 钉钉/飞书机器人,5 秒内可触达值班。
- 回退可选项:
① 同实例**时间点恢复(PITR)**到最近成功备份;
② 克隆实例到临时实例做数据抽检;
③ 跨区域副本提升为 primary;
④ 逻辑导出(gcloud sql export sql)做表级补救。 - 合规要求:等保 2.0 要求故障处置记录保留 6 个月,因此每一步必须打标签
integrity-check-fail-{ticket},方便审计。
答案
当收到 BACKUP_INTEGRITY_CHECK_FAILED 告警,按以下六步回退流程执行:
-
0~2 分钟:故障定级
通过gcloud sql operations list --instance=<实例ID> --filter=operationType=BACKUP_RESTORE确认失败范围;若影响最后一份自动备份,立即标记为 P0。 -
2~5 分钟:业务止血
若实例仍可读写,禁止手动触发新的备份,防止脏链覆盖;若实例已不可读写,直接跳到第 5 步。 -
5~10 分钟:选择回退策略
依据 RPO 与合规要求,在国内双可用区部署前提下,优先采用克隆实例验证法:gcloud sql instances clone <源实例> <克隆实例> --point-in-time=2024-06-18T08:00:00+08:00克隆实例使用临时只读账号,跑
checksum table或pg_dump --data-only做逻辑抽检,确认数据完好。 -
10~20 分钟:根因定位并行
在克隆实例验证同时,下载失败备份的Cloud Storage 对象日志,用gsutil hash -h比对本地 CRC32C;若不一致,判定为网络上传丢包,走 Google 官方工单申请后端重传;若一致,则怀疑内存位翻转或引擎 Bug,需开 High-Priority Case 并上传mysql_error.log。 -
20~30 分钟:正式恢复
克隆实例验证通过后,采用原地指针切换方案:- 对 MySQL,使用
gcloud sql instances promote-replica把同区域只读副本提升为 primary,旧主降级为只读,确保连接串不变(通过 Private IP 漂移实现)。 - 对 PostgreSQL,直接修改
cloudsql.iam_authentication标签触发重启+提升,重启窗口控制在 30 秒内。
若已无健康副本,则使用最近成功备份 + 连续日志做 PITR,命令:
gcloud sql instances restore-backup <实例ID> --backup-instance=<备份实例> --restore-instance=<新实例> --point-in-time=2024-06-18T07:59:59+08:00恢复后,立即跑业务黄金 SQL(如订单表
select count(*) where update_time > 恢复点)确认数据零丢失。 - 对 MySQL,使用
-
30 分钟后:复盘与加固
在飞书故障群输出 5W1H 报告;把失败备份对象标记integrity-fail-do-not-delete保留 30 天;启用备份链双区域冗余(--storage-type=REGIONAL改为--storage-type=DUAL_REGION),并调低自动备份校验告警阈值到 1 次失败即升级,防止漏警。
拓展思考
- 如果校验失败发生在跨地域备份链(北京→上海),而上海区域 GCS 桶出现级联延迟,你会优先用北京本地快照还是上海逻辑导出?如何向客户证明数据一致性?
- 国内部分券商要求备份文件落盘后再做一次国密 SM3 哈希,请设计一套无代理侧车方案,让 Cloud SQL 自动备份完成后触发 Cloud Functions 计算 SM3 并写入OSS 审计桶,同时不暴露 SA 私钥。
- 假设你管理 500 套实例,如何基于Terraform + Cloud Asset Inventory 实现校验失败自动开单+自动选择最小 RPO 恢复路径,把平均回退时间压到 15 分钟以内?