目录
一、远程连接MySQL用户权限问题
解决方案
二、mysql使用聚合函数group by 报错
解决方案一
解决方案二
三、MySQL导入数据时 server has gone away
解决方案一
解决方案二
远程连接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;
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服务器超时设置过短,导致连接断开。
- 导入的sql文件过大,MySQL服务器无法处理所有数据,导致连接断开。
- MySQL服务器内存不足,无法处理数据,导致连接断开。
修改超时设置:打开Mysql配置文件,找到"[mysqld]"一栏,在下面修改(没有这两个参数的话可直接添加)下面两个参数
wait_timeout=600
max_allowed_packet=64M
参数值可以根据自己需求修改,修改完成后记得重启mysql
当一个sql文件过大时,我们可以通过将其拆分成更小的文件,逐个导入到数据库中,以避免连接断开的问题。可以使用“split”或其他类似命令进行操作。
持续更新 ~