【问题标题】:Mysql 5.6 to mysql 8 upgradation throwing warning message the row size is xxx which is greater than maximum allowed size (8126)Mysql 5.6 到 mysql 8 升级抛出警告消息行大小为 xxx,大于最大允许大小 (8126)
【发布时间】:2023-02-10 09:45:59
【问题描述】:
在将现有的 mysql 5.6 升级到 mysql 8 时,每个数据库多次在 mysqld.err 日志中收到警告消息日志
[警告] [MY-011825] [InnoDB] 无法在表 dbName.myTable 中添加字段 abc 因为添加后,行大小为 8500,大于记录的最大允许大小 (8126)索引叶页。
我在多个门户网站上获得的解决方案是更改 row_format compact -> dynamic。
它是完整的证明解决方案。需要确认是否有可能丢失数据?
【问题讨论】:
标签:
database-migration
mysql-8.0
mysql-5.6
【解决方案1】:
您遇到的警告消息与 InnoDB 中的最大行大小有关,InnoDB 是 MySQL 使用的存储引擎。 InnoDB 中的最大行大小由页面大小决定,而在 MySQL 8.0 中,默认页面大小为 16KB。
将行格式从“紧凑”更改为“动态”的推荐解决方案可以通过允许存储引擎存储更大的行来帮助解决此问题。但是,请务必注意此更改可能会导致磁盘使用量增加,因为“动态”行格式将可变长度列存储在页外,这可能会导致额外的磁盘 I/O。
至于数据丢失,如果操作正确,更改行格式不应导致数据丢失。但是,在对数据库进行任何更改之前备份数据始终是个好主意,以确保在出现问题时可以恢复数据。
我建议您先在测试环境中测试此更改,然后再将其应用到您的生产数据库,以确保它满足您的需求并确保不会产生意外后果。