新加TiFlash节点启动失败

2020.11.24 04:03:09.690610 [ 1 ] Application: Bootstrap failed because sync schema error: DB::Exception: void TiDB::TableInfo::deserialize(const String&): Parse TiDB schema JSON failed (TableInfo): Invalid access: Can not convert empty value., json: {“id”:238,“name”:{“O”:“test”,“L”:“test”},“charset”:"",“collate”:"",“cols”:[{“id”:1,“name”:{“O”:“f”,“L”:“f”},“offset”:0,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:4,“Flag”:128,“Flen”:12,“Decimal”:-1,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""},{“id”:2,“name”:{“O”:“db”,“L”:“db”},“offset”:1,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:5,“Flag”:128,“Flen”:22,“Decimal”:-1,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""},{“id”:3,“name”:{“O”:“de”,“L”:“de”},“offset”:2,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:246,“Flag”:128,“Flen”:11,“Decimal”:0,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""}],“index_info”:null,“fk_info”:null,“state”:5,“pk_is_handle”:false,“comment”:"",“auto_inc_id”:0,“max_col_id”:3,“max_idx_id”:0,“ShardRowIDBits”:0}

反复报错了几个小时起不来,然后找到报错的表结构是

CREATE TABLE `test` (
  `f` float DEFAULT NULL,
  `db` double DEFAULT NULL,
  `de` decimal(11,0) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

看起来没什么问题
试着运行了下
alter table test rename to test_bk;
alter table test_bk rename to test;
以后就好了

后续出现mysql.stats_meta mysql.stats_meta mysql.stats_buckets这几个表报错,都是这样以后通过了

原因不明

版本号
Starting component cluster: display test-cluster
Cluster type: tidb
Cluster name: test-cluster
Cluster version: v4.0.8

记录下mysql库的报错

2020.11.24 07:37:48.359249 [ 15 ] SchemaSyncService: DB::SchemaSyncService::SchemaSyncService(DB::Context&)::<lambda()>: Sync schemas failed by DB::Exception: void TiDB::TableInfo::deserialize(const String&): Parse TiDB schema JSON failed (TableInfo): Invalid access: Can not convert empty value., json: {“id”:27,“name”:{“O”:“stats_buckets”,“L”:“stats_buckets”},“charset”:"",“collate”:"",“cols”:[{“id”:1,“name”:{“O”:“table_id”,“L”:“table_id”},“offset”:0,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:8,“Flag”:4233,“Flen”:64,“Decimal”:0,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""},{“id”:2,“name”:{“O”:“is_index”,“L”:“is_index”},“offset”:1,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:1,“Flag”:4225,“Flen”:2,“Decimal”:0,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""},{“id”:3,“name”:{“O”:“hist_id”,“L”:“hist_id”},“offset”:2,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:8,“Flag”:4225,“Flen”:64,“Decimal”:0,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""},{“id”:4,“name”:{“O”:“bucket_id”,“L”:“bucket_id”},“offset”:3,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:8,“Flag”:4225,“Flen”:64,“Decimal”:0,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""},{“id”:5,“name”:{“O”:“count”,“L”:“count”},“offset”:4,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:8,“Flag”:4225,“Flen”:64,“Decimal”:0,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""},{“id”:6,“name”:{“O”:“repeats”,“L”:“repeats”},“offset”:5,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:8,“Flag”:4225,“Flen”:64,“Decimal”:0,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""},{“id”:7,“name”:{“O”:“upper_bound”,“L”:“upper_bound”},“offset”:6,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:252,“Flag”:4225,“Flen”:65535,“Decimal”:0,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""},{“id”:8,“name”:{“O”:“lower_bound”,“L”:“lower_bound”},“offset”:7,“origin_default”:null,“default”:null,“generated_expr_string”:"",“generated_stored”:false,“dependences”:null,“type”:{“Tp”:252,“Flag”:128,“Flen”:65535,“Decimal”:0,“Charset”:“binary”,“Collate”:“binary”,“Elems”:null},“state”:5,“comment”:""}],“index_info”:[{“id”:1,“idx_name”:{“O”:“tbl”,“L”:“tbl”},“tbl_name”:{“O”:"",“L”:""},“idx_cols”:[{“name”:{“O”:“table_id”,“L”:“table_id”},“offset”:0,“length”:-1},{“name”:{“O”:“is_index”,“L”:“is_index”},“offset”:1,“length”:-1},{“name”:{“O”:“hist_id”,“L”:“hist_id”},“offset”:2,“length”:-1},{“name”:{“O”:“bucket_id”,“L”:“bucket_id”},“offset”:3,“length”:-1}],“is_unique”:true,“is_primary”:false,“state”:5,“comment”:"",“index_type”:1}],“fk_info”:null,“state”:5,“pk_is_handle”:false,“comment”:"",“auto_inc_id”:0,“max_col_id”:8,“max_idx_id”:1,“ShardRowIDBits”:0}

tiflash 这块启动时候的报错日志辛苦完整传一份。

额,不好意思,昨天这个节点发现挂载的硬盘不对,着急换硬盘,所以等解决完问题节点up以后很快就缩容换硬盘了,日志没有保留

目前正常了吗? 还有其他问题吗?

现在已经正常了,发出来就是跟你们报备一下,可能其他人也会遇到,我们这个集群是这两年从1.x一点一点升级上来,可能会跟全新的集群稍微不一样

多谢多谢。我再和您确认下 具体情况。

  1. 扩容这台 tiflash 之前,有其他tiflash 节点吗?
  2. 报错是 tiflash 的日志吗? 方便上传一份 tidb.log 和 tiflash.log 吗? 从扩容开始到遇到报错后一段时间即可,我们看下具体问题。

之前没有tiflash的节点,报错是tiflash的日志

log的话tidb.log刚检查了下没看到有用的信息,tiflash.log因为换硬盘没有源文件了…

好的,多谢。 看报错是这个表有 json 吗? 方便发一下报错时表的表结构吗?

没有json

CREATE TABLE `test` (
  `f` float DEFAULT NULL,
  `db` double DEFAULT NULL,
  `de` decimal(11,0) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

里面数据我看了就3行,可能创建时间很早吧,不知道具体原因

好的,麻烦了,多谢

初步分析是老版本升级上来的时候,tiflash 在对这些表的 schema 解析时不完善,假设了某些新版本中才加入的 field 一定存在,而实际老版本的 schema 中并不存在这个 field,导致解析报错。我们内部正在根据您提供的 schema 重现问题,定位后会尽快修复。

感谢帮助我们发现问题完善产品,并为“修改表名绕过问题”这个机智的方法点赞:call_me_hand:
@Still4

2赞

问题已经定位并修复,原因如楼上 @zanmato 所说。

因为 4.0.9 已经封板,我们预计会在 4.0.10 带出这个修改。

再次感谢您的反馈!

2赞