tencent cloud

双 blob 字段 purge/rollback 导致表空间 fseg not full list 损坏
最后更新时间:2025-12-04 15:36:59
双 blob 字段 purge/rollback 导致表空间 fseg not full list 损坏
最后更新时间: 2025-12-04 15:36:59

问题

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

触发场景

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

涉及问题的内核版本

MySQL 8.0 20220831、MySQL 8.0 20220401、MySQL 8.0 20220331、MySQL 8.0 20220330、MySQL 8.0 20211202、MySQL 8.0 20210830、MySQL 8.0 20210330、MySQL 8.0 20201230。

修复的内核版本

MySQL 8.0 20221002。

检查方法

可参考如下命令进行筛查。
查询表详细列信息
SELECT
t1.TABLE_SCHEMA,
t1.TABLE_NAME,
t1.COLUMN_NAME,
t1.DATA_TYPE
FROM
INFORMATION_SCHEMA.COLUMNS t1
INNER 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_NAME
WHERE
-- 外层再次过滤类型,确保只列出造成风险的列
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.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;

修复方法

1. 将内核版本升级至 MySQL 8.0 20221002,操作方法请参考 升级内核小版本
2. 升级内核版本后,对已损坏的表进行重建修复,可以通过 alter table xx engine = innodb; 的方法进行修复。为了避免锁表导致的业务影响,建议通过 pt-osc 等工具在业务低峰期进行修复。
本页内容是否解决了您的问题?
您也可以 联系销售 提交工单 以寻求帮助。

文档反馈