MySQL-5.56-MariaDB 转到MySQL-8.0.33过程笔记

将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上面执行非常慢,注意是: 非常慢!

  • 原因:
  1. 不同的MySQL版本采用了不同的查询优化器
  2. 这里测试的SQL语句包含有不少的子查询,估计MySQL8对子查询的优化没有MySQL5做的到位(只是估计)
  • 解决:
  1. 重写SQL,避免使用子查询
  • 结果:
    执行速度跟之前MySQL5的速度基本一致了,符合预期。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值