mysql最大连接数_Mysql最大连接数

连接数不足报错

"Can not connect to MySQL server. Too many connections"-mysql 1040

这是因为访问MySQL且还未释放的连接数目已经达到MySQL的上限。

MySQL默认的最大连接数为100,MySQL允许的最大连接数16384。

Windows下由于线程数限制MySQL最大连接数为2048。

查看mysql的连接数

mysql -u User -pPassword

show variables like 'max_connections' \G;

*************************** 1. row ***************************

Variable_name: max_connections

Value: 100

修改mysql的最大连接数为2000

临时方案(重启失效)

msyql > set global max_connections=2000;

mysql > exit

永久方案

#!/bin/bash

myCnf=/etc/my.cnf

grep -lq max_connections ${myCnf}

if [ $? -eq 0 ];then

sed -i "/max_connections/d" ${myCnf}

sed -i '/\[mysqld\]/a\max_connections = 2000' ${myCnf}

else

sed -i '/\[mysqld\]/a\max_connections = 2000' ${myCnf}

fi

Mysql连接数相关

在MySQL数据库层面,以下参数决定了可同时打开的表的数量和要使用的文件描述符

table_open_cache(table_cache)

max_tmp_tables

open_files_limit

show status like 'Open_tables';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Open_tables | 19 |

+---------------+-------+

Open_tables:

指当前数据库打开的表的数量,但非实际打开的表的数量。

由于MySQL是多线程的系统,数个不同的并发连接可能打开同一张表,这就需要为不同的连接session分配独立的内存空间来存储这些信息以避免冲突,因此连接数的增加会导致MySQL需要的文件描述符数目的增加。

另外对于MyISAM表,还会建立一个共享的索引文件描述符。

通过flush tables命令可以关闭当前打开的表。

show variables like 'table_cache';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| table_cache | 64 |

+---------------+-------+

table_open_cache(table_cache):

指MySQL所有线程能同时打开多少表。

我们可以搜集系统打开表的数量的历史记录和这个参数来对比,决定是否要增加这个参数的大小。

show variables like 'max_tmp_%';

+----------------+-------+

| Variable_name | Value |

+----------------+-------+

| max_tmp_tables | 32 |

+----------------+-------+

max_tmp_tables:

指单个客户端连接能打开的临时表数目

show global status like '%tmp%table%';

+-------------------------+--------+

| Variable_name | Value |

+-------------------------+--------+

| Created_tmp_disk_tables | 0 |

| Created_tmp_tables | 118241 |

+-------------------------+--------+

Created_tmp_disk_tables与Created_tmp_tables:

根据这两个值可以判断临时表的创建位置,一般选取BLOB和TEXT列、Group by 和 Distinct语句的数据量超过512 bytes,或者union的时候select某列的数据超过512 bytes的时候,就直接在磁盘上创建临时表了

另外内存中的临时表变大的时候,也可能被MySQL自动转移到磁盘上(由tmp_table_size和max_heap_table_size参数决定)

增加table_open_cache(table_cache)或max_tmp_tables参数的大小后,从操作系统的角度看,mysqld进程需要使用的文件描述符的个数增加,需要修改open_files_limit

show variables like 'open_files%';

+------------------+-------+

| Variable_name | Value |

+------------------+-------+

| open_files_limit | 10000 |

+------------------+-------+

open_files_limit:

这个参数受限于OS,非必然生效。

如果OS限制MySQL不能修改这个值,那么置为0。

如果是专用的MySQL服务器上,这个值一般要设置的尽量大,就是设为没有报Too many open files错误的最大值。

当操作系统无法分配足够的文件描述符的时候,mysqld进程会在错误日志里记录警告信息。

show global status like '%file%';

+-------------------+-------+

| Variable_name | Value |

+-------------------+-------+

| Created_tmp_files | 5 |

| Open_files | 0 |

+-------------------+-------+

Open_files和Opened_files(Created_tmp_files):

记录了当前和历史的文件打开信息

show status like '%thread%';

+------------------------+-------+

| Variable_name | Value |

+------------------------+-------+

| Delayed_insert_threads | 0 |

| Slow_launch_threads | 0 |

| Threads_cached | 0 |

| Threads_connected | 61 |

| Threads_created | 69950 |

| Threads_running | 1 |

+------------------------+-------+

threads_connected:

MySQL为每个连接分配线程来处理,可以通过threads_connected参数查看当前分配的线程数量。

比较threads_connected参数和前面提到的max_connections参数,可以作为目前的系统负载的参照,决定是否需要修改连接数

杀Mysql连接

# 杀掉所有连接

out1=$(mysql -B test -uroot -proot --disable-column-names -e "select concat('KILL ',id,';') from information_schema.processlist where user='root' and time > 200;")

mysql -B test -uroot -proot --disable-column-names -e "$out1"

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值