Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 492|回复: 0

MySQL--数据库连接异常问题汇总

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-9-4 10:38:27 | 显示全部楼层 |阅读模式

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

    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...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-1 17:58 , Processed in 0.059446 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表