MySQL-5.56-MariaDB 转到MySQL-8.0.33过程笔记
- 将MySQL 5中的数据导出并导入到MySQL8中
- 在MySQL8中执行带有 GROUP BY的语句时会报错:
- ```同样的SQL查询语句,在MySQL5(这里测试是5.5版本-MaraiaDB)执行速度正常,但是在MySQL8上面执行非常慢,注意是: 非常慢! ```
将MySQL 5中的数据导出并导入到MySQL8中
问题:MySQL8在“运行MySQL 5导出的sql文件”时,报错:
解决:找到数据库的配置文件my.cnf(linux) / my.ini(windows) ,并添加:
注意:要重启数据库,方才生效
在MySQL8中执行带有 GROUP BY的语句时会报错:
Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column
'medical_advisor.r.audit_time' which is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by
大意:
ORDER BY 子句不在 GROUP BY 子句中,并且包含非聚合列“medical_advisor.r.audit_time”,它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容.
原因:
根据提示,查看MySQL8 sql_mode的配置情况:
解决:
- 去掉ONLY_FULL_GROUP: 在MySQL的配置文件my.cnf中的[mysqld],手动添加一行
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
(将上图查询出来的值,复制过来,并删除“ONLY_FULL_GROUP,”即可)
- 重启数据库,永久生效
同样的SQL查询语句,在MySQL5(这里测试是5.5版本-MaraiaDB)执行速度正常,但是在MySQL8上面执行非常慢,注意是: 非常慢!
原因:
- 不同的MySQL版本采用了不同的查询优化器
- 这里测试的SQL语句包含有不少的子查询,估计MySQL8对子查询的优化没有MySQL5做的到位(只是估计)
解决:
- 重写SQL,避免使用子查询
结果:
执行速度跟之前MySQL5的速度基本一致了,符合预期。