修改MySQL最大连接数有两个方法 。一个是直接在命令行中修改,另一个是配置文件
第一种:命令行修改 。mysql -uroot -pmysql>show variables like 'max_connections';(查可以看当前的最大连接数)msyql>set global max_connections=1000;(设置最大连接数为1000,可以再次查看是否设置成功)mysql>exit(退出)这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态 。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改 。
第二种:修改配置文件 。这 种方式说来很简单,只要修改MySQL配置文件my.cnf的参数max_connections,将其改为max_connections=1000,然后重启MySQL即可 。配置文件一般在/etc下,如果找不到可以查看一下mysql进程号也可以看到引用的配置文件
与连接数相关的几个参数:
在修改最大连接数的时候会有这样一个疑问—这个值是不是越大越好,或者设置为多大才合适?这个参数的大小要综合很多因素来考虑,比如使用的平台所支持的线程库数量、服务器的配置(特别是内存大小)、每个连接占用资源(内存和负载)的多少、系统需要的响应时间等 。可以在global或session范围内修改这个参数 。连接数的增加会带来很多连锁反应,需要在实际中避免由此引发的负面影响 。
【MySQL设置最大连接数】首先看一下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 secThreads: 12 Questions: 18 Slow queries: 10 Opens: 33 Flush tables: 5 Open tables: 34 Queries per second avg: 6.256Open tables:34,即当前数据库打开表的数量是34个,注意这个34并不是实际的34个表,因为MySQL是多线程的系统,几个不同的并发连接可能打开同一个表,这就需要为不同的连接session分配独立的内存空间来存储这些信息以避免冲突 。因此连接数的增加会导致MySQL需要的文件描述符数目的增加 。另外对于MyISAM表,还会建立一个共享的索引文件描述符 。
在MySQL数据库层面,有几个系统参数决定了可同时打开的表的数量和要使用的文件描述符,那就是table_open_cache、max_tmp_tables和open_files_limit 。
1mysql> 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参数决定) 。
推荐阅读
- 九个MySQL数据库经典错误
- 淘宝洋淘秀在哪里设置 洋淘买家秀怎么设置
- 四统促建成贵最大高端绿茶生产合作社
- 佛教中能量最大的咒语 能量最强的咒语
- 世界上最大的动物是水母 世界上最毒的海洋动物
- 世界上最大的鲨鱼有多长 世界上最大的鲨鱼最大可以长多少米
- mysql之my.cnf/my.ini常用配置整理
- 我国最大的佛像在哪里 中国最大佛像拆除是真的吗
- 世界上飞的最高的鸟类之一 现存世界上最大的鹰有多大
- 鳐鱼是海洋中最大的硬骨鱼 鳎目鱼最大多少斤
