AnyShare - AnyShare 5.0 大版本升级至 7.0,升级 7.0 数据库结构过程中,数据库恢复报错:Index column size too large. The maximum
关键字
大版本升级、数据库结构、字符集、索引
适用产品
- AnyShare Enterprise 7.0.4.2
- AnyShare Express 7.0.4.2
问题描述
由 AnyShare 5.0 升级到 AnyShare 7.0 的环境,进行大版本升级过程中,升级数据库结构到 AnyShare 7.0 报错,提示:
Exception: execute sql failed,error: (1709, 'Index column size too large. The maximum size is 767 bytes')

问题影响
升级数据库结构到 AnyShare 7.0 失败,无法继续进行大版本升级。
问题原因
升级数据库结构到 AnyShare 7.0,需要调整数据库字符集由 utf8 (三字节字符集) 转换为 utf8mb4 (四字节字符集)。AnyShare 5.0 升级上来的环境,数据库表行格式默认为 Compact,支持的最大索引长度为 767 字节。AnyShare 数据库表的索引最长为 255字符,切换数据库字符集会导致索引超出最大索引长度的限制,导致该切换操作失败。
解决方案
为了解决该问题,需要调整 AnyShare 7.0 数据库表的行格式为 Dynamic (支持最大索引长度 3072 字节),请按照以下步骤执行:
1.通过 SSH 工具连接 AnyShare 7.0 任一 master 节点的 Linux 系统后台。
2.执行以下命令连接数据库,根据提示输入数据库密码。
kubectl exec -it -nresource proton-mariadb-proton-rds-mariadb-0 -- bash
mysql -uroot -p

3.执行以下命令,查询需要修改的数据库表,并生成修改语句。
select concat("alter table ",table_schema,".",table_name," row_format=dynamic;") from information_schema.tables where table_schema in ('anyshare','eofs','sharemgnt_db') and information_schema.tables.row_format='compact';

4.退出数据库,将查询到的语句复制到数据库持久化目录新建文件中。
vi /sysvol/mariadb/alter_char.sql

5.执行以下命令,修改数据库表行格式,根据提示输入数据库密码。
kubectl exec -ti mariadb-mariadb-0 -nresource -- bash
mysql -uroot -p < /var/lib/mysql/alter_char.sql

6.修改完成再次进行数据库结构升级即可。
更多信息
了解数据库字符集转换更多内容,可参考 mysql 官网:mysql 字符集转换。