TDSQL-C MySQL 版 双 blob 字段 purge/rollback 导致表空间 fseg not full list 损坏

双 blob 字段 purge/rollback 导致表空间 fseg not full list 损坏。

相关产品
TDSQL-C MySQL 版 产品页,含版本规格、价格与购买入口。

一、触发场景

带两列 blob 数据的表进行 DML 操作可能导致表空间 not full list 损坏,进而导致在该表空间的 DML 操作 crash,主备数据可能同时损坏导致双机 crash。

二、涉及问题的内核版本

TXSQL 8.0 3.0.1至3.1.7版本。

三、修复的内核版本

TXSQL 8.0 3.1.8。

四、检查方法

可参考如下命令进行筛查。

·查询表详细列信息

SELECT t1.TABLE_SCHEMA, t1.TABLE_NAME, t1.COLUMN_NAME, t1.DATA_TYPEFROM INFORMATION_SCHEMA.COLUMNS t1INNER JOIN ( — 子查询:先找出符合条件(特定类型列数 >= 2)的表 SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE IN ('blob', 'mediumblob', 'longblob', 'json', 'text', 'MEDIUMTEXT', 'LONGTEXT', 'geometry') AND TABLE_SCHEMA IN ('xxx', 'xxxx') — 请替换为实际库名 GROUP BY TABLE_SCHEMA, TABLE_NAME HAVING COUNT(*) >= 2) t2 ON t1.TABLE_SCHEMA = t2.TABLE_SCHEMA AND t1.TABLE_NAME = t2.TABLE_NAMEWHERE — 外层再次过滤类型,确保只列出造成风险的列 t1.DATA_TYPE IN ('blob', 'mediumblob', 'longblob', 'json', 'text', 'MEDIUMTEXT', 'LONGTEXT', 'geometry');

·查询风险表信息

SELECT TABLE_SCHEMA, TABLE_NAME, COUNT(*) as risky_column_count, GROUP_CONCAT(COLUMN_NAME) as risky_columns — 可选:将列名合并显示在一行FROM INFORMATION_SCHEMA.COLUMNSWHERE DATA_TYPE IN ('blob', 'mediumblob', 'longblob', 'json', 'text', 'MEDIUMTEXT', 'LONGTEXT', 'geometry') AND TABLE_SCHEMA IN ('xxx', 'xxxx')GROUP BY TABLE_SCHEMA, TABLE_NAMEHAVING COUNT(*) >= 2;

五、修复方法

1. 将内核版本升级至 TXSQL 8.0 3.1.8,操作方法请参考 升级内核小版本。

2. 升级内核版本后,对已损坏的表进行重建修复,可以通过 alter table xx engine = innodb; 的方法进行修复。为了避免锁表导致的业务影响,建议通过 pt-osc 等工具在业务低峰期进行修复。

赞 (0)
上一篇 4天前
下一篇 4天前