描述“备份完整性校验和”失败时的回退流程。

解读

在国内金融、政企及互联网核心场景,备份完整性校验失败被视为P0级故障,必须在分钟级内完成决策。面试官想确认两点:

  1. 你是否清楚 Cloud SQL 的三层校验机制(对象级 CRC32C、存储级哈希、逻辑级导出校验)。
  2. 当三层之一失败,你能否给出可落地的回退路径,而不是简单“再跑一次”。
    回答时要体现“先恢复业务、再定位根因、最后补齐数据”的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 告警,按以下六步回退流程执行:

  1. 0~2 分钟:故障定级
    通过 gcloud sql operations list --instance=<实例ID> --filter=operationType=BACKUP_RESTORE 确认失败范围;若影响最后一份自动备份,立即标记为 P0。

  2. 2~5 分钟:业务止血
    若实例仍可读写,禁止手动触发新的备份,防止脏链覆盖;若实例已不可读写,直接跳到第 5 步。

  3. 5~10 分钟:选择回退策略
    依据 RPO 与合规要求,在国内双可用区部署前提下,优先采用克隆实例验证法

    gcloud sql instances clone <源实例> <克隆实例> --point-in-time=2024-06-18T08:00:00+08:00
    

    克隆实例使用临时只读账号,跑 checksum tablepg_dump --data-only逻辑抽检,确认数据完好。

  4. 10~20 分钟:根因定位并行
    在克隆实例验证同时,下载失败备份的Cloud Storage 对象日志,用 gsutil hash -h 比对本地 CRC32C;若不一致,判定为网络上传丢包,走 Google 官方工单申请后端重传;若一致,则怀疑内存位翻转或引擎 Bug,需开 High-Priority Case 并上传 mysql_error.log

  5. 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 > 恢复点)确认数据零丢失

  6. 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 分钟以内?