归档后,如何验证源库与归档文件的数据一致性?

解读

在国内金融、政企及互联网强监管场景下,归档(冷备、长期留存或审计副本)必须可验证、可回滚、可举证。面试官想确认你:

  1. 是否理解 Cloud SQL 托管边界(Google 只保证实例级一致性,跨系统一致性需用户自证);
  2. 能否在零停机或低停机窗口内完成端到端校验
  3. 是否熟悉国内合规“双录三验”(录操作、录结果;验总量、验样本、验逻辑)要求。

知识点

  • Cloud SQL 导出格式:MySQL 用 mysqldumpcsv,PostgreSQL 用 pg_dump 自定义格式或 csv,SQL Server 用 .bakcsv
  • 一致性维度行数、校验和、哈希、业务主键、事务一致性点
  • Google 托管能力Cloud Storage 对象 MD5/CRC32C 自动计算,但不保证与数据库内部一致性
  • 国内网络跨境 VPC 专线境内 Cloud Storage 双栈域名storage.googleapis.cn)保证拉取速度。
  • 工具链gsutil hashmd5sumpg_checksumsmysqlsumData Validation Tool(DVT)Terraform output 捕获快照时间。

答案

我采用“三阶六步”法,在低峰 02:00-04:00 窗口完成,全程Terraform 编排+云审计日志录屏,满足国内等保及证监会《证券基金经营机构信息技术管理办法》第 28 条。

  1. 冻结一致性点
    对 MySQL 启用一致性导出

    gcloud sql export sql ${INSTANCE_ID} gs://${BUCKET}/archive/$(date +%F).sql \
      --database=${DB} --offload \
      --parallel=8 \
      --project=${PROJECT_ID}
    

    --offload 让 Google 使用备库导出,避免锁表;PostgreSQL 用 pg_dump --snapshot-too-old 参数,快照时间戳写入文件名。

  2. 云端二次校验和
    导出完成后立即触发 Cloud Function,读取 Cloud Storage 对象的 CRC32C 并与本地重新计算对比,差异>0 即报警

  3. 行级总量核对
    在源库执行:

    SELECT COUNT(*), COALESCE(CHECKSUM_AGG(CRC32(CONCAT_WS('#', id, gmt_modified))),0)
      FROM orders;
    

    归档文件拉回临时 Compute Engine 实例,并行解析 SQL/csv,用相同算法重算;误差率 0% 才通过。

  4. 业务主键抽样
    银保监 5‰ 抽样比例,随机抽取 5000 条主键,双向 SELECT *md5sum 比对;只要 1 条不一致即全表回滚重备

  5. 时点恢复验证
    新建隔离实例 restore-verify,把归档文件 gcloud sql import sql 回灌,开启 binlog 对比工具(MySQL 用 mysqlbinlog --base64-output=decode-rows -v)确认事务顺序一致;PostgreSQL 用 pg_waldump 比对 LSN。

  6. 出具一致性报告
    Terraform 输出 JSON 包含:源实例名、导出时间点、CRC32C、行数、校验和、抽样误差率、恢复实例名、比对结果;加盖云审计日志的 trace_id,上传至证监会指定底稿系统保存 20 年

若任一环节失败,自动触发 gcloud sql export 重试,三次失败则人工介入,并冻结该归档版本,禁止后续覆盖。

拓展思考

  • 大表百亿行场景:放弃单文件,改用分片导出+ShardingSphere-Scaling并行哈希桶校验,O(N) 复杂度降至 O(N/M)
  • 合规升级:国内个人信息保护法要求敏感字段脱敏后归档,可在导出管道中加 Cloud DLP 模板,但需重新计算脱敏后校验和,并在报告中声明脱敏算法与盐值
  • 多云容灾:若归档需同步到阿里云 OSS 或腾讯 COS,使用Transfer Service for on-premises 先落北京 Region 单可用区,再跨区域复制目标桶同样执行 CRC32C 二次校验,实现多云一致性证据链
  • 零信任审计:把上述六步脚本封装成Google Cloud Build Trigger,配合Cloud KMS 签名每次归档自动生成不可抵赖的 SHA256 证据包,满足国内法院电子数据取证标准(GB/T 29361-2022)。