有些人觉得,解决too many connections问题,灰非简单,down了mysql,修改my.cnf调大max_connections,好吧,你想法是没错的,这的确可以解决问题,但试问对于线上在跑的MySQL,你能随便down吗?嘻嘻,如果不行,只能用另外的方法了

一旦出现了too many connections错误,DBA或者运维人员已经连接不上MySQL去动态修改max_connections了,下面做实验来演示一下:

为了方便演示,我把max_connections调小到4:

mysql> set global max_connections=4;
Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'max_connec%';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| max_connect_errors | 10 |
| max_connections | 4 |
+--------------------+-------+
2 rows in set (0.00 sec) mysql>

然后打开几个seesion连接mysql,当连接超出4个时,报以下错误:

[root ~]$ mysql -uroot -p123456 -S /data/mysql-5.5/mysql.sock
ERROR 1040 (HY000): Too many connections

提示也非常明显,就是我们配置的连接数太小,现在已经用完了,这时我们只能通过hack的方法,用过gdb直接修改mysqld内存中max_connections的值,具体做法如下:

可能很人的系统环境上没有安装gdb,安装下即可:

[root ~]$ gdb -p $(cat /data/mysql-5.5/localhost.localdomain.pid) -ex "set max_connections=500" -batch
-bash: gdb: command not found
[root ~]$ yum install gdb -y

然后执行gdb -p $(cat /data/mysql-5.5/localhost.localdomain.pid) -ex "set max_connections=500" -batch;  cat后面跟的是你当前mysql服务的pid文件,根据自己的存放指定即可,后面是修改mysqld内存中max_connections为多少

也可以这样查看自己的pid文件存放在那里:

mysql> show variables like '%pid%';
+---------------+-------------------------------------------+
| Variable_name | Value |
+---------------+-------------------------------------------+
| pid_file | /data/mysql-5.5/localhost.localdomain.pid |
+---------------+-------------------------------------------+
1 row in set (0.00 sec)
[root ~]$ gdb -p $(cat /data/mysql-5.5/localhost.localdomain.pid) -ex "set max_connections=500" -batch
[New LWP ]
[New LWP ]
[New LWP ]
[New LWP ]
[New LWP ]
[Thread debugging using libthread_db enabled]
0x00007f49f1c82333 in poll () from /lib64/libc.so.

这时已经可以连接mysql了,查看它的max_connections已经不再是之前的4了,而是500了

mysql -uroot -p123456 -S /data/mysql-5.5/mysql.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.40-log MySQL Community Server (GPL) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show global variables like 'max_conn%';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| max_connect_errors | 10 |
| max_connections | 500 |
+--------------------+-------+
2 rows in set (0.04 sec) mysql>

在Percona5.5的thread_pool里面提供了2个参数extra_port和extra_max_connections预留额外的连接,预防连接满了以后我们无法进入数据库进行相应的管理。

[root msb_5_5_40]$ ./use
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.40-36.1 Percona Server (GPL), Release 36.1, Revision 707 Copyright (c) 2009-2014 Percona LLC and/or its affiliates
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql ((none)) > show variables like '%extra%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| extra_max_connections | 1 |
| extra_port | 10010 |
+-----------------------+-------+
2 rows in set (0.00 sec)

当出现超出最大链接的错误时,可以指定用户名 密码 端口登录,端口为extra_port设置的,不是mysql服务自身的端口,相信大家都觉得这个功能很贴心吧,哈哈^.^

总结:

通常有两个参数控制控制最大连接数:

max_connections:该实例允许最大的连接数

max_user_connections:该实例允许每个用户的最大连接数 

每个人要根本自己业务量,设置合适的值,不要盲目有设置过大,但也不设置过小,因为MySQL在连接数上升的情况下性能下降非常厉害,如果需要大量连接,这时可以引入thread_pool,所以我们需要保持一个原则:系统创建的用户(给应用使用用户)数* max_user_connections  < max_connections。这样就不会发生文章开始说的问题。

参考资料:

http://www.mysqlperformanceblog.com/2010/03/23/too-many-connections-no-problem/

http://www.percona.com/doc/percona-server/5.5/performance/threadpool.html

http://www.cnblogs.com/gomysql/p/3834797.html

作者:陆炫志

出处:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111

您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。

解决Too many connections问题的更多相关文章

  1. JDBC整合c3p0数据库连接池 解决Too many connections错误

    前段时间,接手一个项目使用的是原始的jdbc作为数据库的访问,发布到服务器上在运行了一段时间之后总是会出现无法访问的情况,登录到服务器,查看tomcat日志发现总是报如下的错误. Caused by: ...

  2. libpqxx接口的在linux下的使用,解决psql:connections on Unix domain socket "/tmp/.s.PGSQL.5432"错误

    在项目中使用postgresql数据库时要求在windows和linux双平台兼容.于是在windows下使用的接口在linux下爆出异常: psql:connections on Unix doma ...

  3. Navicat使用常见的两个问题及解决方法,提高开发效率

    Navicat使用常见问题 在我们日常开发过程中,一般不会直接使用命令行来操作 MYSQL 数据库,而会选择一些图形化界面去帮助我们来进行此类操作,常用的有:SQLyog(Logo也是小海豚),Nav ...

  4. Data source rejected establishment of connection, message from server: "Too many connections"解决办法

    异常名称 //数据源拒绝从服务器建立连接.消息:"连接太多" com.MySQL.jdbc.exceptions.jdbc4.MySQLNonTransientConnection ...

  5. (转)MySQL提示“too many connections”的解决办法

    link:http://www.cfp8.com/mysql-prompt-too-many-connections-solution.html 今天生产服务器上的MySQL出现了一个不算太陌生的错误 ...

  6. 解决 -ERR Plaintext authentication disallowed on non-secure (SSL/TLS) connections 方案[sendmail, dovecot]

    在linux下安装sendmail比较容易, 但是在配置sendmail时却是比较麻烦的, 特别是对于一些新手来说, 配置过程必须十分小心谨慎, 要知道, 错误是千奇百怪, 但是成功的结果就只有一个, ...

  7. 解决mysql 1040错误Too many connections的方法

    从官方文档知道linux上面编译安装的mysql默认的连接为100个,这样对于网站的需求来说是远远不够的. mysql官方告诉我们需要修改max_connections的值,那么我们怎么去修改呢?有两 ...

  8. mysql 提示too many connections”的解决办法

    最近使用python多线程连接mysq打数据,安装好mysql后,使用500线程连接发现提示:too many connections, 查询方法得知是需要进行配置才行: 产生这种问题的原因是: 连接 ...

  9. MySQL提示“too many connections”的解决办法

    今天生产服务器上的MySQL出现了一个不算太陌生的错误"Too many connections".平常碰到这个问题,我基本上是修改/etc/my.cnf的max_connecti ...

随机推荐

  1. HUAS 2018暑假第一周比赛-题解

    小朋友们有问题评论区 :) B. 子串计算 难度系数 : ☆ Main idea : 模拟 暴力 按照题目的要求一步一步来就行了 之所以可行的原因是从左往右扫,如果扫到一个子串,把它删除掉之后,假设当 ...

  2. LOG4J 的配置

    公司启动全国支票影像系统,有这样一个功能是和消息中间件打交道,需要记录每一个报文出错情况,因为方便后期开发人员的调试,我选用了log4j作为日志记录,好了废话不多说了! 第一步:首先建立一个WEB工程 ...

  3. 1019C Sergey's problem(思维)

    题意: 找出来一个点集S  使得S中的点不能互相通过一步到达 并且S中的点 可以在小于等于2的步数下到达所有的点 要父结点 不要子结点 这样就求出来一个点集S‘  而S'中可能存在 v -> u ...

  4. python里使用正则表达式的非贪婪模式

    在正则表达式里,什么是正则表达式的贪婪与非贪婪匹配 如:String str="abcaxc"; Patter p="ab*c"; 贪婪匹配:正则表达式一般趋向 ...

  5. vue 新增时清除表单验证注意事项

    // 清除表单校验的提示 if (this.$refs['XXX']) { // 延时执行 this.$nextTick(function () { this.$refs['XXX'].clearVa ...

  6. .net 里面打不出来ConfigurationManager

    ConfigurationManager 这个东东是读取配置文件时需要的. 首先要引用命名空间里面 using System.Configuration; 其次呢,在解决方案的引用里,单机右键进行添加

  7. 说说SQL Server的数据类型

    以SQL Server为例,SQL Server的数据类型总共有33种,归纳为一下类别: 精确数字 Unicode字符串 近似数字 二进制字符串 日期和时间 其他数据类型 字符串   1.数字数据类型 ...

  8. 了解Linux操作系统的引导过程

    原文地址:http://os.51cto.com/art/200706/49690.htm 1.简介 Linux启动过程指的是从加电到看到shell提示的这一段时间. Linux启动的过程可以大概分为 ...

  9. Linux之svn数据备份、还原及迁移

    前言 因管理需求现要将svn数据进行备份,作为运维小哥的我在收到指令后进行了相关操作.当然,领导告知的是要备份,但作为一个有思想的运维,我考虑到的是自己要干的不仅仅是备份操作,还要确保在备份后数据还原 ...

  10. 求二叉树中第K层结点的个数

    一,问题描述 构建一棵二叉树(不一定是二叉查找树),求出该二叉树中第K层中的结点个数(根结点为第0层) 二,二叉树的构建 定义一个BinaryTree类来表示二叉树,二叉树BinaryTree 又是由 ...