MySQL 5.7与MySQL 8.0之间的差异,虽不明显,但细节之处大有不同。这些差异在推动业务升级时起着关键作用,以下列举了其中四个主要细节:
细节1:
在MySQL 5.7版本中,全面推行了GTID,导致了原有的`create table xxx as select * from xx`模式不再适用,建议改用`create table xxx like xxxxx; insert into xxx select * from xxxxx;`。而在MySQL 8.0中,很多之前不建议使用的模式开始被支持,使得一些业务模式在升级后出现了混乱。
MySQL 5.7中的表结构配置如`kube_resource_version`表,使用了`BOOL`类型作为`one_row_id`。在MySQL中,该字段被默认转换为`tinyint(1)`类型,但在MySQL 8.0中,创建表时使用`BOOL`类型会导致错误,显示为`An expression of non-boolean type specified to a check constraint`,8.0版本对数据类型的要求更严格。
细节4:
在处理大表删除操作时,MySQL 5.7在执行`delete`操作时,状态和信息显示为`Executing event`和`delete from xxxxx`,同时`Seconds_Behind_Master`显示为0,实际数据已产生延迟。而在MySQL 8.0中,状态和信息显示为`Applying batch of row changes (delete)`和`delete from xxxxx`,明确提示出批量操作,尽管延迟问题依然存在,但至少在操作提示上更为清晰。