TiFlash突然挂掉,启动不起来

【 TiDB 使用环境】生产环境
【 TiDB 版本】7.1.2
【复现路径】未做任何操作
【遇到的问题:问题现象及影响】
突然挂掉后,查看日志:


Attempted access has violated the permissions assigned to the memory area
重启后启动不了报错:
[2024/06/05 16:11:18.690 +08:00] [ERROR] [] ["DB::Exception: Cannot create table from metadata file /data/deploy/install/data/tiflash-9000/metadata/db_1077654/t_1487435.sql, error: DB::Exception: Cannot parse string ‘CURRENT_DATE’ as MyDate: syntax error at position 8 (parsed just ‘CURRENT_’), stack trace:\n\n 0x1c54f3e\tDB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, int) [tiflash+29708094]

文件,t_1487435.sql:

ATTACH TABLE t_1487435

(

id Int32,

company Nullable(String),

illegal_person Nullable(String),

original_qualifications_levels Nullable(String),

now_qualifications_levels Nullable(String),

registered_capital Nullable(String),

dataid Nullable(String),

declaration_type Nullable(String),

declaration_time Nullable(String),

annex_path Nullable(String),

annex_web_url Nullable(String),

dataid_new Nullable(String), q

data_caiji Nullable(MyDate) DEFAULT CAST(‘CURRENT_DATE’ AS Nullable(MyDate)),

apt_code Nullable(String),

apt_code_date Nullable(MyDate),

project_name Nullable(String),

project_id Nullable(String),

company_id Nullable(String),

company_name Nullable(String),

apt_name Nullable(String)

)

ENGINE = DeltaMerge(id,

将文件夹db_1077654移除后,能正常启动

SELECT * FROM INFORMATION_SCHEMA.TIFLASH_TABLES a
WHERE a.database=‘db_1077654’
AND a.table=‘t_1487435’;
把对应表找到,然后tiflash replica设置成0,试一下,应该是这个表的表结构有问题

我把所有的表tiflash replica都设置成0也会报这个错,而且这个表并没有加入到tiflash中,这是原表的ddl:
CREATE TABLE zhujianbu_company_declare_qualification_info (
id int(11) NOT NULL AUTO_INCREMENT,
declaration_time varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘申报时间’,
company varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘企业名称’,
company_name varchar(255) DEFAULT NULL COMMENT ‘企业名称清洗’,
company_id varchar(50) DEFAULT NULL COMMENT ‘企业id’,
apt_name varchar(255) DEFAULT NULL COMMENT ‘资质名称’,
apt_code varchar(255) DEFAULT NULL COMMENT ‘资质代码-反洗数据’,
apt_code_date date DEFAULT NULL COMMENT ‘资质取得日期’,
now_qualifications_levels varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘现资质证书’,
project_name varchar(255) DEFAULT NULL COMMENT ‘最后使用的业绩名称:排除多次申请业绩不符项’,
project_id varchar(50) DEFAULT NULL COMMENT ‘四库业绩编号’,
illegal_person varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘法人’,
original_qualifications_levels varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘原资质证书’,
registered_capital varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘注册资金’,
declaration_type varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘申报类型’,
annex_path varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘附件路径’,
annex_web_url varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘附件网页url’,
dataid varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘dataid’,
dataid_new varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
data_caiji date DEFAULT CURRENT_DATE COMMENT ‘采集日期’,
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=570001

是不是最近升级上来的?之前低于 650 版本。。。如果是的可能是遇到 bug 了。
推荐重做下 tiflash:tiflash replica 0 >> 缩容 tiflash >> 扩容 tiflash >> tiflash replica 2

确实,可以试试这个方案,我们之前因为使用Flashback恢复被误删的数据(部分数据建了TiFlash副本)时触发了TiFlash Bug,导致TiFlash一直启动不了,后面采用的处理方式也是先删除TiFlash副本,然后扩缩容TiFlash节点,最后重新设置TiFlash副本。

升级下版本

那你集群是不是真的是升级上来的,我记得5版本的tiflash即使表没有tiflash副本,也会创建tiflash表结构的,7按理说只会创建有tiflash副本的表结构啊。。。你看下/data/deploy/install/data/tiflash-9000/metadata/这个目录下是不是所有的库和表都有表结构,不管是不是有tiflash副本?

DB::Exception: Cannot parse string ‘CURRENT_DATE’ as MyDate”,这表明TiDB在尝试从元数据文件t_1487435.sql 中恢复表结构时,遇到了对默认值表达式CURRENT_DATE 解析失败的问题。TiDB或其组件TiFlash在这里期待一个有效的日期格式,但是直接使用CURRENT_DATE 作为默认值时出现了语法错误。

学习学习