“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最大连接数设置

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

  2. mysql连接数紧张_Mysql 查看连接数,状态,最大并发数

    mysql: error 1040: too many connections"的异常情况,造成这种情况的一种原因是访问量过高,mysql服务器抗不住,这个时候就要考虑增加从服务器分散读压力 ...

  3. mysql查看连接数命令_Mysql 查看连接数,状态

    命令: show processlist; 如果是root帐号,你能看到所有用户的当前连接.如果是其它普通帐号,只能看到自己占用的连接. show processlist;只列出前100条,如果想全列 ...

  4. mysql数据库连接数释放_MySQL数据库连接数问题及处理

    一.MySQL连接数超标原因分析 MySQL的默认最大连接数为100(N),实际给普通用户使用只有N-1个,保留一个连接是留给超级管理员使用的,防止连接占满了不会把管理员也踢出来.很多网站在运行的时候 ...

  5. mysql连接编码设置_MySQL基础 - 编码设置

    刚开始工作的时候,在工作中遇到的与数据库相关的问题,多半跟编码有关,总结一下数据库编码的设置. 字符集 查看数据库支持的字符集: mysql> SHOW CHARACTER SET; 从图中可以 ...

  6. mysql 查询缓存设置_MySQL查询缓存设置 提高MySQL查询性能

    从 MySQL4开始,出现了QueryCache查询缓存,如果使用了QueryCache,当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提 ...

  7. mysql 连接 字符集设置_Mysql 字符集的设置和修改

    Show variables like 'character%';  //显示目前mysql默认 字符集 显示数据连接字符集 修改字符集 D:\mysql>Net stop mysql   // ...

  8. mysql 连接数测试_mysql最大连接数试验

    一.试验基础环境配置 1.查看当前数据库的最大连接数 mysql> show global variables like '%connect%';+----------------------- ...

  9. mysql数据库的字符集设置_mysql数据库字符集设置

    1. mysql UTF8设置 1)vi /etc/my.cnf [client] port = 3306 socket = mysql default-character-set=utf8 [mys ...

最新文章

  1. Python:XPath与lxml类库
  2. Google 的 QUIC 华丽转身成为下一代网络协议: HTTP/3.0
  3. java自带工具_深入了解Java JDK自带工具,包括javac、jar、jstack等,实用~
  4. 【bzoj4080】[Wf2014]Sensor Network 随机化
  5. MySQL卸载5.重新安装 8.0.20教程(windows 64位)
  6. 两种方法用于检查传入的数字是否为整数
  7. php mongo sort -1出错,mongoDB排序引起的ERROR
  8. AC日记——Count on a tree bzoj 2588
  9. devops 分支管理策略_DevOps招聘策略以吸引顶尖人才
  10. 机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之二(作者简介)...
  11. C#只能靠参数而不能靠返回值类型的不同来区分方法重载
  12. cocos2dx mysql_初次接触cocos2dx
  13. 最全攻略:利用LightSeq加速你的深度学习模型
  14. html桌面程序实例spark,【01】Spark 简单实例
  15. 2020年东三省数学建模联赛(辽宁赛区)获奖名单
  16. 做360度评估引发员工不满?
  17. 【转】抽象基类与接口,共性与个性的选择!
  18. 计算电话费练习【20171121】
  19. android 瀑布流 github,GitHub - youxilua/waterfall4android: android瀑布流
  20. 化妆品行业电商平台系统解决方案

热门文章

  1. vue中生成条形码(jsbarcode)、二维码(qrcodejs2)
  2. 大学生学计算机的自我介绍范文带翻译,大学英语自我介绍范文带翻译_大学带翻译英语自我介绍范文...
  3. 浅谈服务器物理内存、RAM 和 CPU
  4. pikachu反射型xss(get、post)、储存型xss
  5. QT+GIS+opengl,实现地图瓦片的离线opengl渲染,支持放大拖拽
  6. saml2.0 java_Java创建Sample SAML 2.0 AuthnRequest
  7. 一部手机就可以完成,台词混剪赚钱,一个月挣了5000多
  8. Redis 分片集群搭建
  9. Redis 搭建分片集群
  10. 送你一双看见时间的眼睛--时间master软件