Backup & Restore 常见问题

    本文列出了在使用 Backup & Restore (BR) 时,可能会遇到的问题及相应的解决方法。

    如果遇到未包含在此文档且无法解决的问题,可以在 社区中提问。

    在恢复的时候,每个节点都必须能够访问到所有的备份文件(SST files),默认情况下,假如使用 local storage,备份文件会分散在各个节点中,此时是无法直接恢复的,必须将每个 TiKV 节点的备份文件拷贝到其它所有 TiKV 节点才能恢复。

    建议在备份的时候挂载一块 NFS 网盘作为备份盘,详见将单表数据备份到网络盘

    BR 备份时,对集群影响多大?

    使用 sysbencholtp_read_only 场景全速备份到非服务盘,对集群的影响依照表结构的不同,对集群 QPS 的影响在 15%~25% 之间。

    如果需要控制备份带来的影响,可以使用 --ratelimit 参数限速。

    BR 会备份系统表吗?在数据恢复的时候,这些系统表会冲突吗?

    全量备份的时候会过滤掉系统库(,performance_schemamysql)。参考。

    因为这些系统库根本不可能存在于备份中,恢复的时候自然不可能发生冲突。

    BR 遇到 Permission denied 错误,即使用 root 运行 BR 也无法解决,该如何处理?

    需要确认 TiKV 是否有访问备份目录的权限。如果是备份,确认是否有写权限;如果是恢复,确认是否有读权限。

    在进行备份操作时,如果使用本地磁盘或 NFS 作为存储介质,请确保执行 BR 的用户和启动 TiKV 的用户相同(如果 BR 和 TiKV 位于不同的机器,则需要用户的 UID 相同),否则很备份可能会出现该问题。

    这类问题几乎都是 TiKV 在写盘的时候遇到的系统调用错误。检查备份目录的挂载方式和文件系统,试试看备份到其它文件夹或者其它硬盘。

    目前已知备份到 samba 搭建的网盘时可能会遇到 Code: 22(invalid argument) 错误。

    BR 遇到错误信息 rpc error: code = Unavailable desc =...,该如何处理?

    该问题一般是因为使用 BR 恢复数据的时候,恢复集群的性能不足导致的。可以从恢复集群的监控或者 TiKV 日志来辅助确认。

    要解决这类问题,可以尝试扩大集群资源,以及调小恢复时的并发度 (concurrency),打开限速 (ratelimit) 设置。

    使用 local storage 的时候,BR 备份的文件会存在哪里?

    在使用 local storage 的时候,会在运行 BR 的节点生成 backupmeta,在各个 Region 的 Leader 节点生成备份文件。

    备份数据有多大,备份会有副本吗?

    备份的时候仅仅在每个 Region 的 Leader 处生成该 Region 的备份文件。因此备份的大小等于数据大小,不会有多余的副本数据。所以最终的总大小大约是 TiKV 数据总量除以副本数。

    • 在 4.0.3 版本之前,BR 恢复时产生的 DDL jobs 还可能会让 TiCDC / Drainer 执行异常的 DDL。所以,如果一定要在 TiCDC / Drainer 的上游集群执行恢复,请将 BR 恢复的所有表加入 TiCDC / Drainer 的阻止名单。

    TiCDC 可以通过配置项中的 filter.rules 项完成,Drainer 则可以通过 完成。

    BR 会备份表的 SHARD_ROW_ID_BITSPRE_SPLIT_REGIONS 信息吗?恢复出来的表会有多个 Region 吗?

    会的,BR 会备份表的 PRE_SPLIT_REGIONS 信息,并恢复成多个 Region。

    使用 BR 恢复备份数据后,SQL 查询报错 region is unavailable

    如果 BR 备份的集群有 TiFlash,恢复时会将 TiFlash 信息存进 TableInfo。此时如果恢复的集群没有 TiFlash,则会报该错误。计划在未来版本中修复该错误。

    BR 是否支持就地 (in-place) 全量恢复某个历史备份?

    不支持。

    可以使用 kubectl 执行 kubectl -n ${namespace} get bk ${name} 以获得上次 BR 备份 commitTs 字段,该字段的内容可作为 --lastbackupts 使用。

    BR 恢复存档后是否需要对表执行 ANALYZE 以更新 TiDB 在表和索引上留下的统计信息?

    BR 不会备份统计信息(v4.0.9 除外)。所以在恢复存档后需要手动执行 ANALYZE TABLE 或等待 TiDB 自动进行 ANALYZE

    BR v4.0.9 备份统计信息使 BR 消耗过多内存,为保证备份过程正常,从 v4.0.10 开始默认关闭备份统计信息的功能。

    如果不对表执行 ANALYZE,TiDB 会因统计信息不准确而选不中最优化的执行计划。如果查询性能不是重点关注项,可以忽略 。