近期线上的数据遇到一个问题,最终原因为max_user_connections和max_connections的一个bug导致,具体过程如下

现象

  前端页面不断的出现错误页面。

排查处理过程

  按照数据库的标准排查流程,首先看延迟,慢查询,连接数,这三个最容易出现问题的地方。

  第一时间发现有较大的延迟超过800s,经过分析慢查询日志发现是一条DELETE SQL没有使用索引导致全表查询引发的对服务器IO性能消耗过多导致的。

  同事前端的兄弟们也发现这个业务的调用量徒增几百倍,从一个没什么访问量的业务变为每秒上万访问量的业务。

  故,我们初步推断,这是由于访问量激增引发的平时不明显的问题暴露出来导致的故障。

  但是,第二天我们将索引添加之后,效果很好,慢查询日志已经看不到问题SQL了,但是故障现象还在发生,只不过频次降低。

  基于以上的信息,我们认为不是数据库的问题,而是突增的流量已经超过系统承载范围,需要进行限流。于是就对接口API做了修改。但是经过一天的观察之后,问题的现象仍在稳步增加,并没有消失。这时候,通过添加细粒度的应用日志才得以发现,有很多的more than max_user_connections的报错。而我们的配置是max_user_connections=1024,max_connections=4096。从监控看,从来没有超限的现象发生。为了处理故障,先临时将max_user_connections提高到2048,问题得以解决,经过观察也不再复现,看来问题就出现在连接数上。但是为什么从监控上看连接数并没有超过max值呢?

问题定位

  经过后续的排查,发现这是由于MySQL5.5.12的一个bug导致,具体详见:http://bugs.mysql.com/bug.php?id=65104

  基本的意思是,当max_user_connections设置一个非0的数值时,在一些情况下,这个数值并不会被MySQL Server认可,就算连接数还有空闲,也会拒绝掉部分连接请求。

  这样,上述的情况就可以得到解释了。那么如何进行处理呢? 官方的解释是需要升级MySQL版本,在5.5.25以下的版本都会发生,最好就直接升级到MySQL5.5的最终版本5.5.31最好。(又要各种切换主库了,头疼,这是题外话)

  同时,后期看历史数据,其实已经有很明显的现象表明当时数据库连接有异常,只是被我们忽略了,这是需要检讨的地方。

  从下图可以看出,我们出现问题的时间段上,有比较明显的abort_connectioning的曲线,当我们解决完毕之后又消失了,这就说明在大量abort出现的时候,一定是存在连接数的问题,有可能是MySQL自身,也有可能是程序段没有close()导致的连接数浪费。这都需要具体分析。

经验总结

  首先,从技术层面,对abort_connections的理解程度和重视程度都需要提高。

  其次,从流程和问题定位方案,监控和日志的重要性就不必细说了,只是在多强调2点。第一,监控的点要覆盖全面,如果监控只有连接数二没有abort的数值,那么下次出现诡异的bug问题,仍然还会茫然无头绪。第二,错误日志才是问题定位的根本,除了MySQL,apache,php的错误日志外,应用程序的错误日志同样重要,需要提高重视程度。只有日志反应的问题才是真实存在的问题,而不能光靠经验就推测,运维确实是个吃经验的活,但是也不能犯经验主义的错误。

  最后,从这个故障上来说,关于透明代理、反垃圾等等限流和安全措施方面其实还是有很多地方可以做的,但是不涉及数据库,不再详细分析了。

MySQL的max_user_connections拒绝连接的一次踩雷经验的更多相关文章

  1. 解决 phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接 问题

    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 问题解决办法: 修改co ...

  2. phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接。

     phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 错误产生原因: 修改了 ...

  3. Mac OS本地,XAMPP,出现 “phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接”错误

    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 原因一:有可能是因为修改 ...

  4. phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接 解决办法

    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 原因有可能是因为修改了m ...

  5. phpmyadmin连接MySQL服务器被拒绝

    显示: phpMyAdmin 尝试连接到MySQL服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 原因: 可能是修改了 ...

  6. phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接

    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接--解决方法     phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和 ...

  7. MySQL优化二(连接优化和缓存优化)

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

  8. 安装好mysql后允许远程连接

    安装好mysql后允许远程连接 http://blog.sina.com.cn/s/blog_3eba8f1c0100tsox.html http://blog.csdn.net/zxyvb/arti ...

  9. Sqoop拒绝连接错误

    使用Sqoop远程连接MySQL导入数据到HBase数据库: sqoop import --driver com.mysql.jdbc.Driver --connect "jdbc:mysq ...

随机推荐

  1. 浅析busybox如何集成到openwrt

    背景 近日添加了一个包到openwrt中,在此过程中又对openwrt多了一些认识 这个包本身自带了kconfig,可直接在这个包里面执行make menuconfig进行配置,然后执行make 但要 ...

  2. android sdcard 权限管理策略研究

    自从android4.4 以来,第三方应用程序是不能再随便的访问sdcard了,从开发者的角度而言,研究一下android系统到底是怎么样来实现这样的控制还是比较有价值的. 首先分析下现状,现在已知, ...

  3. POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))

    题目链接:http://poj.org/problem?id=1511 题目大意:给你n个点,m条边(1<=n<=m<=1e6),每条边长度不超过1e9.问你从起点到各个点以及从各个 ...

  4. csu 1551(线段树+DP)

    1551: Longest Increasing Subsequence Again Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: 267  Solve ...

  5. ceph笔记(一)

    一.ceph概述本质上是rados:可靠的.自动的.分布式对象存储特性:高效性(大型的网络raid,性能无限接近raid).统一性(支持文件存储.块存储.对象存储).可扩展性数据库的一个弱点:查表ce ...

  6. lr如何屏蔽全局变量的影响

    首先要熟悉C语言的全局变量和局部变量的含义: C语言中的变量详解 先说说变量的作用域,比如,在函数中,形参变量只是在被调用期间才分配内存单元,调用结束立即释放.这就说明形参变量只有在函授内才是有效的, ...

  7. merc_timer_handle_t函数的使用

    merc_timer_handle_t,是定义一个时间类型,这个时间类型可以用来接收2个函数之间的wasted time 但是在项目中出现这个情况: 因为在脚本中添加了该函数:

  8. c# 递归异步获取本地驱动器下所有文件

    //获取所有驱动器 string[] drives = Environment.GetLogicalDrives(); foreach (string driver in drives) { Cons ...

  9. 用于浏览器本地存储的js插件 - jStorage

    简介 jStorage是一个跨浏览器的将key-value类型的数据存储到浏览器本地存储的js插件——jStorage支持所有主流浏览器,PC机(甚至包括是IE6)和移动终端均可用.此外,jStora ...

  10. bean的singleton(没有看到生命周期范围??)

    4.5.1 The singleton scope Only one shared instance of a singleton bean is managed, and all requests ...