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