故障分析 | ERROR 1709: Index column size too large 引发的思考

故障分析 | ERROR 1709: Index column size too large 引发的思考-1

作者:王田田,DBA,擅长发呆,偶尔热爱分享。

爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

本文约 1500 字,预计阅读需要 5 分钟。


1背景

某日同事突然找到我说测试环境中有张表无法访问,SELECT、DML 和 DDL 执行均报错 ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.

其实看到 767 这个数字,大家可能会猜想这估计和 compact/redundant
行格式有关系,后续也确实证实了和这个有点关系。

问题发生了就要想办法处理,当时第一反应是能不能有些“特殊操作”调整一下元数据,但能力有限无法实现。由于是测试环境,数据没那么重要,而且还是单节点,后续处理无非是利用备份重做这套库;若不想重做,而且该表不重要,也可以直接废弃该表,但是 xtrabackup 备份可能会报错。

既然问题一旦发生,只能通过备份恢复来解决,那么我们应该探究一下如何提前避免该问题。

2原因探究

以下为测试环境复现过程:

MySQL 5.6.21 原地升级至 5.7.20

先调整数据库配置文件,以下为简要升级步骤:

shell>/mysql/mysql-5.7.20/bin/mysqld_safe ... &<br>shell>/mysql/mysql-5.7.20/bin/mysql_upgrade ...<br>mysql>shutdown;<br>shell>/mysql/mysql-5.7.20/bin/mysqld_safe ... &<br>