========================================================

Name or service not known

错误消息:

[Warning] IP address 'xxx.xxx.xx.xxx' could not be resolved: Name or service not known

错误原因:

MySQL数据库服务器上没有配置/ect/hosts,也没有DNS服务,导致MySQL服务线程解析IP对应的主机名时发生失败。

解决办法:

使用参数--skip-name-resolve来禁用DNS的主机名解析功能,禁用该功能后,在MySQL授权表里面,只能使用IP地址。
配置my.cnf中参数为:
skip_host_cache
skip-name-resolve=1

========================================================

Aborted Connections类错误

错误消息:

[Note] Aborted connection 854 to db: 'employees' user: 'josh'

客户端无法正常连接MySQL数据库,主要原因:
1、用户账号不正确
2、用户权限不足
3、连接包存在问题(网络丢包等问题)
4、建立连接时间超过 connect_timeout 参数的阀值

========================================================

Aborted_clients类错误

错误原因:

客户端成功连接MySQL数据库但非正常断开或者异常中止,主要原因有:
1、客户端应用关闭前没有正常调用mysql close()方法
2、客户端建立连接后长时间未向MySQL发出请求,休眠时间超过 wait_timeout 或 interactive_timeout 两个参数
3、客户端在数据传输过程中非正常关闭。

========================================================

No operations allowed after connection closed

异常信息:

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

异常原因:

应用服务器连接数据库服务器后,长时间未使用而导致连接空闲时间超过数据库配置“wait_timeout”的阈值,MySQL自动将这些连接断开,但应用服务器并不知晓该连接失效,再次使用这些连接时就可以报错。

解决办法:

1、增到MySQL参数“wait_timeout”的值
2、减少 Connection pools 中 connection 的 lifetime
3、应用服务器定期检查连接池中各连接的有效性。

========================================================

Cannot assign requested address

问题描述:

使用python+MySQLdb来收集几百个MySQL数据库节点的数据库信息,每个MySQL数据库节点进行1000+次的数据库查询,并将查询结果插入的本地数据库中上(数据库服务器与程序运行在同一服务器中),同样造成1000+的数据库插入,在程序运行中,不定期出现连接失败的异常,异常信息为:
2003,Can’t connect to MySQL server on ‘XXX.XXX.XXX.XXX′(99)

错误代码99含义为:
OS error code 99: Cannot assign requested address
表示无法分配本地地址资源,socket无法创建。

在Linux级别使用命令 netstat -anp |grep TIME_WAIT 可以发现有大量的TIME_WAIT,超过1W+的等待:

问题原因:

在程序运行过程中,运行程序的服务器与其他MySQL数据库服务器频繁建立连接并执行MySQL命令,当MySQL命令执行完成后,TCP连接被关闭后处于TIME_WAIT状态,TCP连接未被及时释放而导致TCP连接端口占满不可用。

解决办法:

配置TCP连接可以重用和快速回收,在文件/etc/sysctl.conf中加入以下代码:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

然后使用/sbin/sysctl -p 命令使配置文件生效。

配置完成后,在程序运行时仍存在大量(超过1W+)处于TIME_WAIT状态的TCP连接,但未再出现连接失败的情况。

相关知识:

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

最新文章

  1. 如何优化coding
  2. 神经网络之Hebb学习规则
  3. Python忽略warning警告错误
  4. MVC筛选自定义属性下拉表
  5. ios8,xcode6 周边
  6. PHP webserver 之 soap non-wsdl
  7. 64位linux安装android sdk的问题
  8. 【python之旅】python的模块
  9. 转:在虚拟机中用NAT方式连接网络
  10. [转]云计算之hadoop、hive、hue、oozie、sqoop、hbase、zookeeper环境搭建及配置文件
  11. 五十行javascript代码实现简单的双向数据绑定
  12. Zim学习笔记 (Fedora)
  13. C++ 虚函数表 多重继承
  14. kail linux虚拟机安装tools工具
  15. Docker:Docker 性质及版本选择 [三]
  16. logging模块使用
  17. 解决Ubuntu中文显示为乱码
  18. 乐字节-Java8新特性之Date API
  19. .NET Core开发日志——Global Tools
  20. Unable to locate \.nuget\NuGet.exe 问题解决办法之一(转)

热门文章

  1. ppt点击文字出现图片,再次点击消失
  2. Oracle与MySQL的SQL语句区别
  3. Linux 目录配置标准:FHS
  4. centos7安装maven,git
  5. TextRank算法
  6. centos安装samba服务和配置
  7. Day20作业及默写
  8. 校验总结:校验是否是中英文等等(1.正则校验 2.hibernate volidator)
  9. pyx文件 生成pyd 文件用于 cython调用
  10. gcc/g++多版本切换 (ubuntu18.04)