添加tiflash失败

【 TiDB 使用环境】测试
【 TiDB 版本】v6.5.4
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
添加tiflash节点时日志报错:[Sync schema failed by DB::Exception: Wrong precision:0]
查看tiflash日志,有同步rep.t_2605表,但检查没有发现该表。

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】


检查tiflash_errog.log会一直报:
[ERROR] [Server.cpp:1212] ["Bootstrap failed because sync schema error: DB::Exception: Wrong precision:0 we will sleep for 3 second and try anain] [thread_id=1]

这是tiflash数据库前期创建结构时就出现异常了

那要怎么处理的,我试过把所有的tiflash节点干掉,重新添加还是有很有这个问题。

是按照这个来的?
https://docs.pingcap.com/zh/tidb/stable/scale-tidb-using-tiup#扩容-tiflash-节点

是否只有这一张表有问题? admin check table 看下,另外可以把表结构发出来大伙看看

扩容时按照这个方法来的。本来是项目组添加了3个tiflash全部都是无法启动的,状态异常的,我就全部使用scale-in -N IP:9000,缩容掉,然后重新扩容tiflash节点还是报同样的错误。

查看tiflash.log日志目前就是发现运行到 createing table rep.t_2605这张表的的下一行就会有[error]这个报错,但是这个表我是在数据库里面没有找到的,无论是使用tables.tidb_table_id来查,还是直接desc rep.t_2605,都是没有找到这个表的。

select * from information_schema.tables where table_name=‘t_2605’;

select * from information_schema.tiflash_replica;

看看这两条命令的结果

你这个集群数据源是业务直接写入的? 还是通过什么同步工具同步到这个集群里的?

这两个SQL查询的结果都是空的。

业务直接写入的。

应该是个分区表,执行下面的 sql 看下是哪个表,然后贴一下表的结构信息呢?

select table_schema,table_name,'' as partition_name,tidb_table_id from information_schema.`tables`
where tidb_table_id = 2605
union
select table_schema,table_name,partition_name,tidb_partition_id from information_schema.`partitions`
where tidb_partition_id = 2605

这个集群是从什么版本升级上来的吗?在 6.5.4 应该无法创建类型是 decimal(0,0) 这样的非法列,会被修正为 decimal(10,0) :rofl:

TiDB> create table abc (d decimal(0,0) default null);
TiDB> show create table abc;
+-------+-------------------------------------------------------------+
| Table | Create Table                                                |
+-------+-------------------------------------------------------------+
| abc   | CREATE TABLE `abc` (                                        |
|       |   `d` decimal(10,0) DEFAULT NULL                            |
|       | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+-------+-------------------------------------------------------------+
TiDB> select tidb_version() \G
***************************[ 1. row ]***************************
tidb_version() | Release Version: v6.5.4
Edition: Community
Git Commit Hash: d7ce2f2faa1da3177a0f0a7e825f6e8fccd13ec8
Git Branch: heads/refs/tags/v6.5.4
UTC Build Time: 2023-08-23 08:32:40
GoVersion: go1.19.12
Race Enabled: false
TiKV Min Version: 6.2.0-alpha
Check Table Before Drop: false
Store: tikv

试下把表结构里面的 remain_mature_days 和 collbl_int_ovdue_days 改成 decimal(10,0) 类型,看下 tiflash 能不能启动?
alter table tbl_name modify column col_name decimal(10,0);

把decimal(0,0)删除就没有问题了,但是这个集群没有升级过,并且这些有decimal(0,0)的表是上周五创建的,不知道在怎么创建的。

1 个赞

这些有decimal(0,0)的表是上周五创建的

可以确认下这些异常的列是通过什么语句创建的吗?比如直接 CREATE TABLE 的时候就写了 decimal(0,0),还是通过 DDL modify column 修改,还是其他什么方式?

可以参考这个文档 https://docs.pingcap.com/zh/tidb/v6.5/sql-statement-admin-show-ddl

-- 找出 DDL 任务的 job-id
ADMIN SHOW DDL JOBS [NUM] [WHERE where_condition];
-- 通过 job-id 找出执行的 DDL 语句
ADMIN SHOW DDL JOB QUERIES <JOB-ID>

创建表的时候 decimal(0),他就是decimal(0,0)了

2 个赞

复现了,感谢!我们后续查一下这个问题能不能在建表时自动修正下。
https://github.com/pingcap/tidb/issues/53779