通过mysql_upgrade 将MySQL 5.5.34 升级为 5.6.31 版本,发现了一些问题:
问题1:增加普通索引的时候,依然堵塞DML语句,理论上MySQL 5.6 支持在线DDL,增加普通索引不会阻塞DML。
原因:5.6.4之前的格式的时间列(TIME,DATETIME和TIMESTAMP列,不支持小数秒精度),升级成5.6后,执行ALTER TABLE会隐式升级,而升级此类列需要重建表,所以阻塞了DML。
解决方式:
- 等ALTER TABLE执行完,下次就不用重建表了。
- 开启 set global avoid_temporal_upgrade=on; 它会使ALTER TABLE不重建临时列。但是官方不推荐使用这个参数,以后会删除。
升级建议:
大版本升级还是使用逻辑升级,mysqldump这种导入导出比较好,避免意外,就是太慢了。