mysql常用错误总结

纵然是瞬间 提交于 2019-12-30 19:03:03

错误1
Lost connection to MySQL  server at 'waiting for initial communication packet

原因分析:
mysql开启了DNS的反向解析功能,这样mysql对连接的客户端会进行DNS主机名查找。
mysql处理客户端解析过程:
1)当mysql的client连过来的时候,服务器会主动去查client的域名。
2)首先查找 /etc/hosts 文件,搜索域名和IP的对应关系。
3)如果hosts文件没有,则查找DNS设置,进行DNS反向解析,直到timeout连接失败。
mysql的DNS反向解析:
1)mysql接收到连接请求后,获得的是客户端的ip,为了更好的匹配mysql.user里的权限记录(某些是用hostname定义的)。
2)如果mysql服务器设置了dns服务器,并且客户端ip在dns上并没有相应的hostname,那么这个过程很慢,导致连接等待。

解决方法
1.在mysql配置文件(my.cnf  默认路径/etc/my.cnf)添加skip-name-resolve禁用dns解析(推荐使用)
> ...
> skip-name-resolve


2. 把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字做主机映射即可。

my.cnf配置的几个参数:
skip-name-resolve         跳过DNS反向解析过程.(这样就不能使用主机名连接mysql了,只能使用ip连接)
skip-grant-tables           跳过授权表(当mysql登陆密码忘记时的解决办法)
skip-networking             跳过TCP/IP连接
skip-host-cache             禁用主机名缓存;要想清除主机名缓存,执行FLUSH HOSTS语句或执行mysqladmin flush-hosts命令


感谢:
https://www.cnblogs.com/94cool/p/9429003.html


错误2
could not be resolved: Temporary failure in name resolution

mysql日志告警信息如下:
13333 18:41:25 [Warning] IP address '192.168.2.173' could not be resolved: Temporary failure in name resolution
13333 18:41:25 [Warning] IP address '192.168.2.173' could not be resolved: Temporary failure in name resolution
......


原因分析:
原因1:可能是未授权
原因2:MYSQL Server在本地内存中维护了一个非本地的Client TCP cache。这个cache中包括了远程Client的登录信息,比方IP地址。hostname等信息。
假设Client连接到server后,Mysql首先会在本地TCP池中依据IP地址解析client的hostname或者反解析,假设解析不到。就会去DNS中进行解析,假设还是解析失败
就是在error log中写入这种警告信息。


解决方法
1. 如果未授权则进行授权

> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
> FLUSH  PRIVILEGES;
#注:%-是通配符,也可以是具体client的ip地址,yourpassword是mysql server的密码

2. 配置文件中追加以下配置(默认位置/etc/my.cnf)
> ......
> skip-host-cache
> skip-name-resolve

错误3
Got a packet bigger than  'max_allowed_packet'  bytes
原因分析:
当用navicat等第三方客户端工具批量导入sql文件或者程序当中批量插入大量数据时容易出现以上错误。即一次导入的数据字节数超过了设置的max_allowed_packet的值

解决方法1:
设置max_allowed_packet的值

1.查看当前一次所允许插入的最大字节数
mysql>  show VARIABLES like 'max_allowed_packet';


2.设置为一个理想值
mysql>  set global max_allowed_packet = 4194304 *10;


3.可以再次查看max_allowed_packet确认


解决方法2
如果是批量导入sql文件引起的,可以使用命令行导入(命令行导入是每次只导入一条)
mysql> source sql文件路径

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!