“Can not connect to MySQL server. Too many connections”-mysql 1040错误,

这是因为访问MySQL且还未释放的连接数目已经达到MySQL的上限。通常,mysql的最大连接数默认是100, 最大可以达到16384

第一种:命令行修改。

mysql>mysql -uuser -ppassword(命令行登录MySQL)

mysql>show variables like 'max_connections';(查可以看当前的最大连接数)

msyql>set global max_connections=1000;(设置最大连接数为1000,可以再次查看是否设置成功)

mysql>exit(推出)

这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。

因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改

第二种:修改配置文件。

这种方式说来很简单,只要修改MySQL配置文件my.ini 或 my.cnf的参数max_connections,

将其改为max_connections=1000,然后重启MySQL即可。但是有一点最难的就是my.ini这个文件在哪找。

通常有两种可能,一个是在安装目录下(这是比较理想的情况),另一种是在数据文件的目录下

安装的时候如果没有人为改变目录的话,一般就在C:/ProgramData/MySQL往下的目录下

与连接数相关的几个参数:

在修改最大连接数的时候会有这样一个疑问—这个值是不是越大越好,或者设置为多大才合适?这个参数的大小要综合很多因素来考虑,比如使用的平台所支持的线程库数量(windows只能支持到2048)、服务器的配置(特别是内存大小)、每个连接占用资源(内存和负载)的多少、系统需要的响应时间等。可以在global或session范围内修改这个参数。连接数的增加会带来很多连锁反应,需要在实际中避免由此引发的负面影响。

首先看一下MySQL的状态:

mysql> status;

--------------

mysql  Ver 14.14 Distrib 5.5.15, for Win32 (x86)

Connection id:          1

Current database:

Current user:           root@localhost

SSL:                    Not in use

Using delimiter:        ;

Server version:         5.5.15 MySQL Community Server (GPL)

Protocol version:       10

Connection:             localhost via TCP/IP

Server characterset:    utf8

Db     characterset:    utf8

Client characterset:    gbk

Conn.  characterset:    gbk

TCP port:               3306

Uptime:                 1 hour 3 min 27 sec

Threads: 12  Questions: 18  Slow queries: 10  Opens: 33  Flush tables: 5  Open tab

les: 34  Queries per second avg: 6.256

--------------

Open tables:34,即当前数据库打开表的数量是34个,注意这个34并不是实际的34个表,因为MySQL是多线程的系统,几个不同的并发连接可能打开同一个表,这就需要为不同的连接session分配独立的内存空间来存储这些信息以避免冲突。因此连接数的增加会导致MySQL需要的文件描述符数目的增加。另外对于MyISAM表,还会建立一个共享的索引文件描述符。

在MySQL数据库层面,有几个系统参数决定了可同时打开的表的数量和要使用的文件描述符,那就是table_open_cache、max_tmp_tables和open_files_limit。

mysql> show variables like 'table_open%';

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

| Variable_name    | Value |

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

| table_open_cache | 256   |

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

1 row in set (0.00 sec)

table_open_cache:256,这就是说所有的MySQL线程一共能同时打开256个表,我们可以搜集系统的打开表的数量的历史记录和这个参数来对比,决定是否要增加这个参数的大小。查看当前的打开表的数目(Open tables)可用上边提到过的status命令,另外可以直接查询这个系统变量的值:

mysql> show status like 'open_tables';

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

| Variable_name | Value |

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

| Open_tables   | 3     |

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

1 row in set (0.00 sec)

Open_tables就是当前打开表的数目,通过flush tables命令可以关闭当前打开的表。 这个值如果过大,并且如果没有经常的执行flush tables命令,可以考虑增加table_open_cache参数的大小。

接下来看max_tmp_tables:

mysql> show variables like 'max_tmp%';

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

| Variable_name  | Value |

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

| max_tmp_tables | 32    |

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

1 row in set (0.00 sec)

max_tmp_tables:32即单个客户端连接能打开的临时表数目。查看当前已打开的临时表的信息:

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

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

| Variable_name           | Value |

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

| Created_tmp_disk_tables | 0     |

| Created_tmp_tables      | 11    |

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

2 rows in set (0.00 sec)

根据这两个值可以判断临时表的创建位置,一般选取BLOB和TEXT列、Group by 和 Distinct语句的数据量超过512 bytes,或者union的时候select某列的数据超过512 bytes的时候,就直接在磁盘上创建临时表了,另外内存中的临时表变大的时候,也可能被MySQL自动转移到磁盘上(由tmp_table_size和max_heap_table_size参数决定)。

增加table_open_cache或max_tmp_tables 参数的大小后,从操作系统的角度看,mysqld进程需要使用的文件描述符的个数就要相应的增加,这个是由open_files_limit参数控制的。

mysql> show variables like 'open_files%';

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

| Variable_name    | Value |

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

| open_files_limit | 2670  |

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

1 row in set (0.00 sec)

但是这个参数是OS限制的,所以我们设定的值并不一定总是生效。如果OS限制MySQL不能修改这个值,那么置为0。如果是专用的MySQL服务器上,这个值一般要设置的尽量大,就是设为没有报Too many open files错误的最大值,这样就能一劳永逸了。当操作系统无法分配足够的文件描述符的时候,mysqld进程会在错误日志里记录警告信息。

相应的,有两个状态变量记录了当前和历史的文件打开信息:

mysql> show global status like '%open%file%';

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

| Variable_name | Value |

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

| Open_files    | 0     |

| Opened_files  | 76    |

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

2 rows in set (0.00 sec)

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

mysql> show status like '%thread%';

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

| Variable_name                            | Value |

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

| Delayed_insert_threads                   | 0     |

| Performance_schema_thread_classes_lost   | 0     |

| Performance_schema_thread_instances_lost | 0     |

| Slow_launch_threads                      | 0     |

| Threads_cached                           | 0     |

| Threads_connected                        | 1     |

| Threads_created                          | 1     |

| Threads_running                          | 1     |

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

8 rows in set (0.00 sec)

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

查看每个线程的详细信息:mysql>show processlist;对影响系统运行的线程:kill connection|query threadid的命令杀死。

mysql 最大连接_MySQL最大连接数设置相关推荐

  1. mysql 修复错误连接_mysql 无法连接问题的定位和修复过程分享

    定位结果如下: 客户环境: windows server 2003 r2 standard edition sp2 mysql Ver 14.12 Distrib 5.0.18, for Win32 ...

  2. mysql 本地连接_mysql开启远程连接及本地连接

    问题描述 在本机windows上连接linux服务器上的mysql报错:host'XXX' is not allowed to connect to this mysql server. 这个错误是由 ...

  3. mysql长连接_mysql.connector 数据库长连接

    最近python服务经常报连接不存在,后来发现原来的同事写的是缓存来存储连接对象,过期就关闭重连,可是有其他线程还在用该连接,于是就出现了连接不存在的错误,于是改进一下: 连接数据库时查看连接对象是否 ...

  4. mysql 全连接_MySQL全连接(Full Join)实现,union和union all用法

    MySQL本身不支持你所说的full join(全连接),但可以通过union来实现 , 下面是一个简单测试,可以看看: mysql> CREATE TABLE a(id int,name ch ...

  5. mac下修改mysql连接数_MySQL最大连接数设置

    在使用MySQL数据库的时候,经常会遇到这么一个问题,就是"Can not connect to MySQL server.Too many connections"-mysql ...

  6. windows mysql 配置最大连接数_MYSQL 最大连接数设置

    在使用MySQL数据库的时候,经常会遇到这么一个问题,就是 "Can not connect to MySQL server. Too many connections"-mysq ...

  7. mysql 增大连接数_MYSQL最大连接数设置

    "Can not connect to MySQL server. Too many connections"-mysql 1040错误, 这是因为访问MySQL且还未释放的连接数 ...

  8. mysql连接数设置_MySQL最大连接数设置

    "Can not connect to MySQL server. Too many connections"-mysql 1040错误, 这是因为访问MySQL且还未释放的连接数 ...

  9. mysql 查看连接_MySql如何查看连接数和状态?

    如何查看mysql数据库的连接数和状态 怎么进入mysql命令行呢? mysql的安装目录下面有个bin目录,先用命令行进入该目录,然后用 mysql -uroot -p123456 来登录(注意:用 ...

最新文章

  1. OMG!我居然把新首页设计出来了!
  2. BS-XX-007基于JSP实现户籍管理系统
  3. PHP预定义常量DIRECTORY_SEPARATOR
  4. iOS 9之3D Touch
  5. cocos2d python文档_【Cocos2D-X 学习笔记】Cocos2D-x 3.0+VS开发环境搭建[使用Python]
  6. Object-C 中的Selector 概念
  7. 如何通过7个Logback调整立即改善Java日志记录
  8. oracle分区表扩分区 很慢,升级oracle10g 大分区表update变慢
  9. python的深造方向_自动化深造方向有哪些?
  10. 火狐浏览器添加restclient.xpi 添加插件时候遇见的 附件未经验证无法安装
  11. 电脑怎么抠图换背景?如何把白底图片变成透明?
  12. 360强力卸载能不能卸载360?我们从360美国退市说起
  13. 2022-2028全球与中国电热毯市场现状及未来发展趋势
  14. STM32学习(一)—STM32固件库的使用
  15. Giving an effective oral presentation at university(The Hong Kong Polytechnic University 香港理工大学)
  16. STM32CUBE+自平衡车实践篇3.4-STM32cueb配置编码器+车轮速度测量代码实现
  17. 手机怎么调整照片分辨率?照片清晰度dpi怎么调整?
  18. 网站运营中活动组织的三项注意
  19. 【JIS-CTF靶场搭建及解题思路】
  20. IIS配置共享Session会话

热门文章

  1. c语言交互式小学生口算题
  2. 聊天服务器-解密陌生人(11)群组管理和群组聊天
  3. Ubuntu下命令行方式对PDF文件进行缩放、合并、拆分
  4. 公众号简单爬虫--把公众号文章全部转载到网站(三)
  5. 中国家用Wifi常见密码TOP10排行榜,你上榜了吗?
  6. 我国上网计算机及用户数量,CNNIC第14次互联网统计报告:上网计算机数
  7. 网站安全检测api网站健康状况查询
  8. 将txt转换成pdf格式的操作方法
  9. 让pycharm使用anaconda的编译环境(base(root))/pycharm装包
  10. Android用kotlin修改一个图片编辑库做一个作业点评的功能