问题说明
PolarDB MySQL版采用自研的分布式文件系统,其最小原子写入单元为4KB。当使用InnoDB压缩表格式(ROW_FORMAT=COMPRESSED)且KEY_BLOCK_SIZE小于4(即1 KB或2 KB)时,由于压缩块大小与底层文件系统的原子写入单位不匹配,可能导致数据损坏风险。为避免该风险对您的数据产生影响,建议您按照以下解决方案排查并处理。
受影响版本
数据库引擎版本 | 受影响的修订版本 |
PolarDB MySQL版 5.6 | 小于等于5.6.1.0.46.1 |
PolarDB MySQL版 5.7 | 小于等于5.7.1.0.40 |
PolarDB MySQL版 8.0.1 | 小于等于8.0.1.1.53 |
PolarDB MySQL版 8.0.2 | 小于等于8.0.2.2.33 |
您可在PolarDB MySQL版集群的中查看当前集群的数据库引擎版本。
解决方案
排查是否存在受影响的压缩表。
请根据您的数据库引擎版本,执行以下SQL查询,检查是否存在
KEY_BLOCK_SIZE小于4的InnoDB压缩表:PolarDB MySQL版 5.6和5.7版本:
SELECT * FROM information_schema.innodb_sys_tables WHERE ROW_FORMAT = 'Compressed' AND ZIP_PAGE_SIZE < 4096;PolarDB MySQL版 8.0.1和8.0.2版本:
SELECT * FROM information_schema.innodb_tables WHERE ROW_FORMAT = 'Compressed' AND ZIP_PAGE_SIZE < 4096;
若查询结果不为空,表示当前集群中存在受影响的表,请提交工单联系我们协助处理受影响的表。若查询结果为空,仍然建议升级至已修复版本以获得自动保护。
警告在受影响的版本中,请避免创建KEY_BLOCK_SIZE小于4的压缩表。如需使用压缩表,请确保KEY_BLOCK_SIZE大于等于4。
升级数据库引擎至已修复版本。
警告升级数据库引擎版本时,可能会导致连接闪断,建议在业务低峰期进行操作。
将数据库引擎升级至受影响版本之后的版本,即可修复该问题。升级操作请参见小版本管理。
升级后,配置安全策略防止后续误创建不兼容的压缩表。新版本已引入
polar_compressed_table_policy参数用于管控新建压缩表时的行为。该参数支持以下策略:策略值
行为说明
NATIVE
原样执行,不做任何干预。不推荐使用,存在数据损坏风险。
ADJUST_KEY_BLOCK_SIZE
默认策略。允许创建压缩表,若
KEY_BLOCK_SIZE小于4,则自动调整为4。AUTO_CONVERT_ROW_FORMAT
静默将压缩表转换为系统默认的行格式。
REJECTED
拒绝创建压缩表并返回错误提示。
说明推荐将
polar_compressed_table_policy设置为ADJUST_KEY_BLOCK_SIZE(默认值)、AUTO_CONVERT_ROW_FORMAT或REJECTED,以防止误操作导致数据损坏。