跳转至

校验

没人恢复过的备份只是一种希望。Tenax 会按计划恢复你的备份、检查它们,并把通过检查的备份标记为已校验。

in a BackupPolicy
spec:
  verify:
    schedule: "17 4 * * 0"          # weekly, Sunday 04:17 in the policy's time zone
    checks: [inventory-matches, row-estimates-within-10pct, target-checks]
    randomPointInTime: true          # also restore a random second inside the window

到了计划时间,控制器会从最新的备份创建一个恢复到沙箱的 Restore;如果存在变更流,还会从窗口内的一个随机时间点再恢复一次。 然后运行以下检查:

检查 通过条件
inventory-matches 恢复出的表和 schema 指纹与备份的清单一致。
schema-matches schema 指纹一致。
row-estimates-within-NNpct 每张表的行数与清单中的估计值相差不超过 NN %。
target-checks 目标上声明的每个 SQL 检查都返回 true。

目标检查是普通的 SQL,必须返回单个 true 值:

in a BackupTarget
spec:
  checks:
    - name: orders-not-empty
      database: app
      sql: select count(*) > 0 from orders
    - name: recent-orders
      database: app
      sql: select max(created_at) > now() - interval '2 days' from orders

通过的运行会给备份打上 verified 标签并记录恢复耗时,以 tenax_verify_rto_seconds 导出。失败的运行会触发 TenaxVerificationFailed;连续 8 天没有成功的运行会触发 TenaxVerificationOverdue。可以用 tenax verify team-a/app --wait 手动运行一次,或在目标页面上点击 立即校验。