Check gc safepoint for last backup ts failed

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:4.0
  • 【问题描述】:

[tidb@tidbpd bin]$ ./br validate decode --field=“end-version” -s local:///data1/br_backupdir_nfs/20200922
Detial BR log in /tmp/br.log.2020-09-22T16.12.37+0800
419629597399711745

./br backup full --pd ${PDIP}:2379 -s local:///data1/br_backupdir_nfs/20200922_incr --lastbackupts 419629597399711745 --log-file /data1/br_backupdir_nfs/backup-nfs-incr.log

[2020/09/22 16:16:31.394 +08:00] [ERROR] [backup.go:154] [“Check gc safepoint for last backup ts failed”] [error=“GC safepoint 419630088880390144 exceed TS 419629597399711745”] [errorVerbose=“GC safepoint 419630088880390144 exceed TS 419
629597399711745\ngithub.com/pingcap/br/pkg/backup.CheckGCSafePoint\ \t/home/jenkins/agent/workspace/build_br_multi_branch_v4.0.0/go/src/github.com/pingcap/br/pkg/backup/safe_point.go:40\ github.com/pingcap/br/pkg/task.RunBackup\ \t/home/
jenkins/agent/workspace/build_br_multi_branch_v4.0.0/go/src/github.com/pingcap/br/pkg/task/backup.go:152\ngithub.com/pingcap/br/cmd.runBackupCommand\ \t/home/jenkins/agent/workspace/build_br_multi_branch_v4.0.0/go/src/github.com/pingcap/
br/cmd/backup.go:22\ngithub.com/pingcap/br/cmd.newFullBackupCommand.func1\ \t/home/jenkins/agent/workspace/build_br_multi_branch_v4.0.0/go/src/github.com/pingcap/br/cmd/backup.go:74\ github.com/spf13/cobra.(*Command).execute\ \t/go/pkg/m
od/github.com/spf13/cobra@v1.0.0/command.go:842\ngithub.com/spf13/cobra.(*Command).ExecuteC\ \t/go/pkg/mod/github.com/spf13/cobra@v1.0.0/command.go:950\ngithub.com/spf13/cobra.(*Command).Execute\ \t/go/pkg/mod/github.com/spf13/cobra@v1.0
.0/command.go:887\ main.main\ \t/home/jenkins/agent/workspace/build_br_multi_branch_v4.0.0/go/src/github.com/pingcap/br/main.go:54\ runtime.main\ \t/usr/local/go/src/runtime/proc.go:203\ runtime.goexit\ \t/usr/local/go/src/runtime/asm_am
d64.s:1357”] [stack=“github.com/pingcap/log.Error\ \t/go/pkg/mod/github.com/pingcap/log@v0.0.0-20200117041106-d28c14d3b1cd/global.go:42\ github.com/pingcap/br/pkg/task.RunBackup\ \t/home/jenkins/agent/workspace/build_br_multi_branch_v4.0
.0/go/src/github.com/pingcap/br/pkg/task/backup.go:154\ngithub.com/pingcap/br/cmd.runBackupCommand\ \t/home/jenkins/agent/workspace/build_br_multi_branch_v4.0.0/go/src/github.com/pingcap/br/cmd/backup.go:22\ github.com/pingcap/br/cmd.new
FullBackupCommand.func1\ \t/home/jenkins/agent/workspace/build_br_multi_branch_v4.0.0/go/src/github.com/pingcap/br/cmd/backup.go:74\ngithub.com/spf13/cobra.(*Command).execute\ \t/go/pkg/mod/github.com/spf13/cobra@v1.0.0/command.go:842\ g
ithub.com/spf13/cobra.(*Command).ExecuteC\ \t/go/pkg/mod/github.com/spf13/cobra@v1.0.0/command.go:950\ngithub.com/spf13/cobra.(*Command).Execute\ \t/go/pkg/mod/github.com/spf13/cobra@v1.0.0/command.go:887\ main.main\ \t/home/jenkins/agen
t/workspace/build_br_multi_branch_v4.0.0/go/src/github.com/pingcap/br/main.go:54\ runtime.main\ \t/usr/local/go/src/runtime/proc.go:203”]

1 个赞

你好,这个报错信息说明在 BR 增量备份过程中,gc safepoint 超过了上一次备份的时间戳,导致增量备份无法获取到从上次备份开始到当前时间内的所有数据快照。BR的增量备份有如下限制:

  • 增量备份需要与前一次全量备份在不同的路径下
  • GC safepoint 必须在 lastbackupts 之前

如果全量备份和增量备份之间的时间间隔比较长,建议调大参数 tikv_gc_life_time 。另外 tidb gc 机制可以参考如下官方文档:
https://docs.pingcap.com/zh/tidb/stable/garbage-collection-overview#gc-机制简介

1 个赞

就是说两次增量备份必须在tikv_gc_life_time这个GC之间? 这个值tikv_gc_life_time调整有没有什么限制,如果增量备份一天一次或者两天一次,那么tikv_gc_life_time这个值调整为2天,对线上性能或其他方面会有何影响么?

1 个赞

1.如果想连续的保证增量备份成功,两次备份的时间间隔要在 tikv_gc_life_time 之内,这样可以保证 gc safepoint 在 lastbackupts 之前;
2. 在数据更新频繁的场景下,如果将 tikv_gc_life_time 设置得比较大(如数天甚至数月),可能会有一些潜在的问题,如:

  • 磁盘空间占用较多。
  • 大量的历史版本会在一定程度上影响性能,尤其是范围查询(如 select count(*) from t

建议你这边两次增量备份的时间间隔不要太长,这样就不需要将 tikv_gc_life_time 设置的很大,从而可以减少 gc 带来的上述问题。

1 个赞

你好 如果想不限次数的增量备份,没有在tikv_gc_life_time 之内,想连续的保证增量备份成功可以吗?有什么办法吗?

如果超过了 gc 时间,目前没有什么好的方式实现增量备份。

1 个赞

好的 谢谢

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。