【MySQL】常见错误汇总

目录

一、远程连接MySQL用户权限问题

解决方案

二、mysql使用聚合函数group by 报错

解决方案一

解决方案二

 三、MySQL导入数据时 server has gone away

解决方案一

解决方案二


一、远程连接MySQL用户权限问题

远程连接MySQL时,提示:ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server,是无法给远程连接的用户权限问题。

解决方案

输入mysql -u root -p密码  进入mysql控制台,执行下面两条语句,即可远程连接了

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION; 

flush privileges;

二、mysql使用聚合函数group by 报错

linux上,mysql使用聚合函数group by 时报错:SELECT list is not in GROUP BY clause and contains nonaggre

报错示例

Expression #2 of SELECT list is not in GROUP BY clause and contains 
nonaggregated column ‘sss.month_id’ which is not functionally 
dependent on columns in GROUP BY clause; this is incompatible with 
sql_mode=only_full_group_by

问题分析: MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”。)

解决方案一

1、打开navcat,用sql查询:

select @@global.sql_mode

2、运行结果

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

3、去掉ONLY_FULL_GROUP_BY,重新设置值。

set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

但以上方式只是临时的,重启mysql后会恢复原来的模式,产生错误。

解决方案二

在配置文件 /etc/my.cnf 或自己的mysql配置文件中去掉ONLY_FULL_GROUP_BY,此方法永久有效。

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

 三、MySQL导入数据时 server has gone away

一般在我们导入大文件时会连接断开,导致出现此类错误

导致原因

  • MySQL服务器超时设置过短,导致连接断开。
  • 导入的sql文件过大,MySQL服务器无法处理所有数据,导致连接断开。
  • MySQL服务器内存不足,无法处理数据,导致连接断开。

解决方案一

修改超时设置:打开Mysql配置文件,找到"[mysqld]"一栏,在下面修改(没有这两个参数的话可直接添加)下面两个参数

wait_timeout=600
max_allowed_packet=64M

参数值可以根据自己需求修改,修改完成后记得重启mysql

解决方案二

当一个sql文件过大时,我们可以通过将其拆分成更小的文件,逐个导入到数据库中,以避免连接断开的问题。可以使用“split”或其他类似命令进行操作。

持续更新 ~

你可能感兴趣的:(数据库,mysql,数据库)