tidb从3.0.5升级到3.0.7报错

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

  • 【TiDB 版本】:v3.0.5
  • 【问题描述】:

目前在测试集群升级,从3.0.5升级到3.0.7,执行 ansible-playbook rolling_update.yml 报错如下:

TASK [check tikv’s leader count] ******************************************************************************************************************************************************************************************************************************* FAILED - RETRYING: check tikv’s leader count (18 retries left). FAILED - RETRYING: check tikv’s leader count (17 retries left). FAILED - RETRYING: check tikv’s leader count (16 retries left). FAILED - RETRYING: check tikv’s leader count (15 retries left). FAILED - RETRYING: check tikv’s leader count (14 retries left). fatal: [172.16.10.171]: FAILED! => {“msg”: “The conditional check ‘(store_info.json.status.leader_count is defined and store_info.json.status.leader_count|int < 1) or store_info.json.status.leader_count is not defined’ failed. The error was: error while evaluating conditional ((store_info.json.status.leader_count is defined and store_info.json.status.leader_count|int < 1) or store_info.json.status.leader_count is not defined): ‘dict object’ has no attribute ‘json’”}

先看一下 172.16.10.171 这台机器的 tikv 实例是否正常 。tikv.log 麻烦提供一下。

日志太大了,好几十兆,我把tikv.log里面的error部分截取下来了,详见附件。 同时在升级期间,有DM同步任务在导入全量数据,目前导入进度40%左右tikv.error (1.2 MB)

取报错前后半小时的日志就行

终端打印的升级日志,没有时间输出,现在也没办法确定是哪一个时间段

我准备重新执行一遍ansible-playbook rolling_update.yml,再截取日志

但是现在又出现另外一个问题,DM同步中断了,报了SQL错误:

我参考文档中的使用sql-skip,文档实例中使用语句:

sql-skip --worker=127.0.0.1:8262 --binlog-pos=mysql-bin|000001.000003:34642 test

这里的binlog信息mysql-bin|000001.000003:34642,对应我这边是什么信息呢?没看懂

ok 你可以重新执行 ,另外 FAILED - RETRYING: check tikv’s leader count (17 retries left) 报这个日志是正常的,不要手工 control +c 。2. --binlog-pos=mysql-bin|000001.000003:34642 指的是跳过指定的位置日志

1、FAILED - RETRYING: check tikv’s leader count (17 retries left)

这个报错,升级期间,我终端没有任何操作。终端最终打印升级失败,在log里才看到有这个信息的

2、DM同步中断,我想说的是文档是不是没有及时更新,示例中跳过的binlog位点信息,是在报错信息中直接打印出来的。而我当前报错的信息中只有binlog开始位置,没有结束位置

还是说我要去解析binlog,然后定位到报错的语句,在确认跳过的起始位置?

如图中圈出的部分,这个位点信息,就是sql-skip中直接可以用的,但是在我当前的报错信息中就没有这样的信息

顺便想问一下,这个同步中断,跟刚升级是不是有关系,因为在升级前还是正常的,升级失败后,同步也断了

你的 query-error 命令 显示结果是什么。tidb server 中断的话 dm 同步应该是会受影响的 。

你把这个任务重新启动一下看看会报什么错

任务重启后好了,看来是受升级影响

ok,那接下来解决升级的问题。你可以先把同步任务先停了再进行滚动升级

同步停了以后,升级成功了。

那我的疑问是,在有数据同步(类似有有正常业务访问)的时候升级不成功,是不是线上集群升级,就得停服才能升级?可以做到在线平滑升级吗?

因为没有看到日志,所以不确定为什么升级失败的原因。支持线上滚动升级,如果集群压力比较大,那么为保证业务正常我们升级动作就可能会失败。

好的,升级那了解了

还请麻烦看看上面那个跳过同步错误的问题,文档中的示例跟实际的情况有出入,不知道是什么原因? 就是报错信息中没有给出跳过的binlog起始位置信息

应该是升级过程中,只是同步中断了,不是执行 sql 语句报错失败。所以 query error 没有报错。我看它的状态是 pasued 所以让你手工再启动一下。这个就跟正常停止 dm 服务一样的状态。只是暂时但是没有报错。

:+1:好的,多谢

继续测试

:+1::+1::+1: