Backup & Restore 常见问题
本文列出了在使用 Backup & Restore (BR) 时,可能会遇到的问题及相应的解决方法。
如果遇到未包含在此文档且无法解决的问题,可以在 AskTUG 社区中提问。
恢复的时候,报错 could not read local://...:download sst failed
,该如何处理?
在恢复的时候,每个节点都必须能够访问到所有的备份文件(SST files),默认情况下,假如使用 local storage,备份文件会分散在各个节点中,此时是无法直接恢复的,必须将每个 TiKV 节点的备份文件拷贝到其它所有 TiKV 节点才能恢复。
建议在备份的时候挂载一块 NFS 网盘作为备份盘,详见将单表数据备份到网络盘。
BR 备份时,对集群影响多大?
使用 sysbench
的 oltp_read_only
场景全速备份到非服务盘,对集群的影响依照表结构的不同,对集群 QPS 的影响在 15%~25% 之间。
如果需要控制备份带来的影响,可以使用 --ratelimit
参数限速。
BR 会备份系统表吗?在数据恢复的时候,这些系统表会冲突吗?
全量备份的时候会过滤掉系统库(information_schema
,performance_schema
,mysql
)。参考备份原理。
因为这些系统库根本不可能存在于备份中,恢复的时候自然不可能发生冲突。
BR 遇到 Permission denied 错误,即使用 root 运行 BR 也无法解决,该如何处理?
需要确认 TiKV 是否有访问备份目录的权限。如果是备份,确认是否有写权限;如果是恢复,确认是否有读权限。
使用 root 运行 BR 仍旧有可能会因为磁盘权限而失败,因为备份文件 (SST) 的保存是由 TiKV 执行的。
BR 遇到错误信息 Io(Os...)
,该如何处理?
这类问题几乎都是 TiKV 在写盘的时候遇到的系统调用错误。检查备份目录的挂载方式和文件系统,试试看备份到其它文件夹或者其它硬盘。
目前已知备份到 samba 搭建的网盘时可能会遇到 Code: 22(invalid argument)
错误。
使用 local storage 的时候,BR 备份的文件会存在哪里?
在使用 local storage 的时候,会在运行 BR 的节点生成 backupmeta
,在各个 Region 的 Leader 节点生成备份文件。
备份数据有多大,备份会有副本吗?
备份的时候仅仅在每个 Region 的 Leader 处生成该 Region 的备份文件。因此备份的大小等于数据大小,不会有多余的副本数据。所以最终的总大小大约是 TiKV 数据总量除以副本数。
但是假如想要从本地恢复数据,因为每个 TiKV 都必须要能访问到所有备份文件,在最终恢复的时候会有等同于恢复时 TiKV 节点数量的副本。
BR 恢复到 Drainer 的上游集群时,要注意些什么?
BR 恢复的数据无法被同步到下游,因为 BR 直接导入 SST 文件,而下游集群目前没有办法获得上游的 SST 文件。
BR 恢复时产生的 DDL jobs 还可能会让 Drainer 执行异常的 DDL。所以,如果一定要在 Drainer 的上游集群执行恢复,请将 BR 恢复的所有表加入 Drainer 的阻止名单。
可以通过 syncer.ignore-table
加入阻止名单。