FlashBack cluster 不可用

【 TiDB 使用环境】测试
【 TiDB 版本】

看文档执行flashback cluster之后会有两份空间占用,那么flashback cluster之后是否支持回滚呢

【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
flashback cluster 失败
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

show variables like ‘%gc%’; 看下这个参数呢,是不是数据被gc了

gc十分钟。我是前后执行完所有sql都不超过2分钟。再说超gc也不是这个报错啊,应该是ERROR 8055 (HY000): snapshot is older than GC safe point 2024-09-04 10:18:32.057 +0800 CST

不加create database试试呢

不create database怎么用啊,也不能就使用系统库啊

你回滚到3点58?是不是时间写错了?

select now()出来的呀,utc时间

https://docs.pingcap.com/zh/tidb/stable/mysql-schema#集群状态系统表

  • tidb_server_version 用于记录 TiDB 在初始化时的版本信息,注意该值为只读,不可修改。

提示里面的 tidb_server_version应该指的是这个mysql库下的系统表。
推测是没有读取这个表的权限造成的。

从这个方向查查看。

1 个赞

这表里有什么东西么

这mysql.tidb的一行数据,不是表

1 个赞

https://github.com/pingcap/tidb/blob/3578e29613771c649e1f8fa4a3e27d3e3b83f0a0/pkg/ddl/cluster.go#L258

// Check if there is an upgrade during [flashbackTS, now)
sql := fmt.Sprintf(“select VARIABLE_VALUE from mysql.tidb as of timestamp ‘%s’ where VARIABLE_NAME=‘tidb_server_version’”, flashbackTSString)
rows, err := sess.NewSession(se).Execute(ctx, sql, “check_tidb_server_version”)
if err != nil || len(rows) == 0 {
return errors.Errorf(“Get history tidb_server_version failed, can’t do flashback”)
}

翻了下,当执行下面这个sql报错,或者没有找到数据就会报这个错。

select VARIABLE_VALUE from mysql.tidb as of timestamp ‘%s’ where VARIABLE_NAME=‘tidb_server_version

把时间带进去查查看。

1 个赞

也是有的

1 个赞

这属实难以理解了。

1 个赞


我在自己环境操作是没问题的

既然这样能查出来,思来想去,可能是执行上面这个sql的时候tidb server报错了,而这个错误可能从mysql的错误提示上是看不出来的。

可能要去tidb的日志里面找找看了。不然这块代码确实是这么写的。这是唯一的可能了。

1 个赞

看来就是执行这个sql的时候因为什么原因报错了导致的。

还有就是这个报错的堆栈好像不完整。有可能的话,提供一个完整日志,去github提交一个issue看看吧。

1 个赞

安装好,是有test库的,或者你create database 等一下,闪回到create database之后的时间,是想排除下,是不是create database影响的,这个好像是新功能。

1 个赞

闪回的就是创建db之后啊,图里面有顺序的