在使用MySQL数据库的时候,经常会遇到这么一个问题,就是“Can not connect to MySQL server.Too many connections”-mysql 1040错误,这是因为访问MySQL且还未释放的连接数目已经达到MySQL的上限。通常,mysql的最大连接数默认是100, 最大可以达到16384。

在Windows下常用的有两种方式修改最大连接数。

第一种:命令行修改。

>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的命令杀死。

mac下修改mysql连接数_MySQL最大连接数设置相关推荐

  1. mac下修改mysql的密码与卸载

    mac下修改mysql的密码 输入 mysql -u root mysql mysql> 状态下输入 update user set password=password('新密码') where ...

  2. Mac 下修改mysql密码

    安装好MySQL以后,系统给了个默认的的密码,然后说如果忘记了默认的密码......我复制了默认密码就走过了只一步,这一步就是我漫长旅程的开始.他给的密码太复杂了,当然我得换一个,而且我还要假装我不记 ...

  3. Mac下修改MYSQL编码格式

    mac 终端里进入mysql和退出 先在偏好设置里启动mysql服务 获取超级权限 在终端输入代码sudo su 输入完后获取超级权限 终端显示sh-3.2# 输入本机密码(Apple ID密码) 接 ...

  4. mac下修改mysql默认字符集为utf8

    1.首先检查默认安装的字符集 mysql> show variables like '%char%'; +--------------------------+----------------- ...

  5. mac下修改vmware fusion的虚拟网卡设置

    https://arnehuo.wordpress.com/2010/06/07/mac%E4%B8%8B%E4%BF%AE%E6%94%B9vmware-fusion%E7%9A%84%E8%99% ...

  6. dos下设置mysql密码_MySQL数据库之dos或wamp下修改mysql密码的具体方法

    本文主要向大家介绍了MySQL数据库之dos或wamp下修改mysql密码的具体方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 最近在纠结如何修改mysql的密码,终于搞定 ...

  7. 学习笔记 | mac下查看mysql的端口号

    mac下 | 查看mysql的端口号 mysql> show global variables like 'port'; 查看端口号 ,mysql的默认端口是3306. (补充:sqlserve ...

  8. mac下的mysql设置中文_mac下解决mysql不兼容中文问题

    一般来说,在mac下安装好mysql以后都是不支持中文的,取存中文都会报错,那是因为相关的编码没有设置好, 用命令mysql -uroot -p 回车输入密码 启动mysql之后,输入 stauts ...

  9. Linux下修改mysql的root密码后数据库消失怎么处理

    Linux系统下如果没有通过password()函数修改mysql的root密码就会导致mysql数据库消失.有些人可能不知道而直接修改了mysql的root密码,于是产生了mysql数据库消失的问题 ...

最新文章

  1. Keepalived+lvs+httpd之负载均衡
  2. Spring(十九):Spring AOP(三):切面的优先级、重复使用切入点表达式
  3. java的equals方法_Java Vector equals()方法与示例
  4. shell mysql e_shell脚本操作mysql数据库
  5. winform窗体对象 单例模式与泛型结合
  6. L1-042 日期格式化 (5 分)—团体程序设计天梯赛
  7. 32 GroupSock(AddressPortLookupTable)——live555源码阅读(四)网络
  8. 电脑右下角自动弹出窗口(弹窗)
  9. 【多多情报通】拼多多个人店铺怎么升级为企业店铺?怎么转让?
  10. tf.data.Dataset介绍1-from_tensor_slices
  11. [《与闲适共处》偶感小记]2012年8月28日
  12. 错排公式——n封信放入n个信封,要求全部放错,共有多少种放法
  13. 猎豹浏览器使用评测(2)-一款很轻的极简绿色浏览器
  14. 从violate到ConcurrentHashMap,我通过引导面试官,过了多场技术面试
  15. 网络电话的优缺点你知道多少?
  16. 完美解决iphone连电脑蓝牙出现bluetooth外围设备无法正确安装
  17. 基于DNN的鼻咽癌鼻咽淋巴瘤数据处理
  18. excel如何合并多个表格文件
  19. 小坤二次元导航HTML源码 很好看的引导页
  20. 容积式水表与速度式水表对比

热门文章

  1. Netty工作笔记0070---Protobuf使用案例Codec使用
  2. Ipimage 转mat
  3. tomcat上传文件,重新加载后删除以及在web.xml中配置全局路径
  4. linux 启动ftp服务,sftp服务
  5. echarts中国地图描绘
  6. linux c++应用程序内存高或者占用CPU高的解决方案_20161213
  7. java 字节乱码_Android/Java 字节读取出现乱码问题
  8. 联想计算机主机编号,联想如何查找主机编号
  9. linux版本与内核对应关系,[科普] Linux 的内核与 Linux 系统之间的关系
  10. html表单中动态添加下拉框,antd Select下拉菜单动态添加option里的内容操作