如果mysql 连接数据设置不合理可能会导致很小的流量mysql就提示MySQL: ERROR 1040: Too many connections错误了,那么要如何才算是合理设置mysql最大连接数呢,下面我来给大家介绍介绍。

MySQL服务器的连接数并不是要达到最大的100%为好,还是要具体问题具体分析,下面就对MySQL服务器最大连接数的合理设置进行了详尽的分析,供您参考。

我们经常会遇见“MySQL: ERROR 1040: Too many connections”的情况,通常,mysql的最大连接数默认是100, 最大可以达到16384。

一种是访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力,另外一种情况是MySQL配置文件中max_connections值过小:

mysql> show variables like 'max_connections';

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

| Variable_name | Value |

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

| max_connections | 256 |

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

这台MySQL服务器最大连接数是256,然后查询一下服务器响应的最大连接数:

mysql> show global status like 'Max_used_connections';

MySQL服务器过去的最大连接数是245,没有达到服务器连接数上限256,应该没有出现1040错误,比较理想的设置是:

Max_used_connections / max_connections * 100% ≈ 85%

最大连接数占上限连接数的85%左右,如果发现比例在10%以下,MySQL服务器连接上线就设置得过高了

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

mysql最大连接数合理值_MySQL服务器最大连接数怎么设置才合理[转]相关推荐

  1. mysql最大连接数合理值_MySQL服务器最大连接数的合理设置

    MySQL服务器的连接数并不是要达到最大的100%为好,还是要具体问题具体分析,下面就对MySQL服务器最大连接数的合理设置进行了详尽的分析,供您参考. 我们经常会遇见"MySQL: ERR ...

  2. qt设置mysql最大连接数_MySQL服务器最大连接数的合理设置

    MySQL服务器的连接数并不是要达到最大的100%为好,还是要具体问题具体分析,下面就对MySQL服务器最大连接数的合理设置进行了详尽的分析,供您参考. 我们经常会遇见"MySQL: ERR ...

  3. mysql修改字段默认值_MySQL增删改查操作

    增删改查操作 查询表中的所有的记录:select from 表名(xs) 创建数据库:create database if not exists xsgl; 8.2创建表:cerate table i ...

  4. mysql连接数详解_MySQl 修改最大连接数详解

    今天使用ide连接线下MySQL报错Can not connect to MySQL server. Too many connections,报错很明确,与MySQL的连接数满了.想想也是,每起一个 ...

  5. mysql索引缓存的内容_mysql服务器变量、缓存及索引

    服务器变量 注意:其中有些参数支持运行时修改,会立即生效:有些参数不支持,且只能通过修改配置文件,并重启服务器程序生效:有些参数作用域是全局的,且不可改变:有些可以为每个用户提供单独(会话)的设置. ...

  6. mysql function 参数默认值_MySQL参数log_bin_trust_function_creators介绍

    MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍.解释如下所示: log_bin_trust_function_creators Comma ...

  7. mysql 查询语句属性值_MySQL学习——SQL查询语句(一)

    查询数据是指从数据库中获取所需要的数据,查询数据是数据库操作中最常用也是最重要的操作,用户可以根据对数据的需求,使用不同的查询方式,通过不同的查询方式可以获得不同的数据,在MySQL中使用select ...

  8. mysql配置所有ip连接_Mysql查看用户连接数配置及每个IP的请求情况

    1.查看当前数据库的连接情况 show full processlist; shop processlist; 2.查看所有用户的总连接数 show variables like '%max_conn ...

  9. mysql自增默认值_mysql auto_increment自增初始值与步长

    MySQl自增列起始与步长 自增初始值 一.alter的使用 默认初始值为1 步长为1的情况 1.建表 2.插入数据 当插入数据可以看到步长为1,起始值为1 3.增加一列数据时 默认在加上步长 4.删 ...

最新文章

  1. 4K P60 444 相关的事
  2. 如何将C#对象转换为.NET中的JSON字符串?
  3. android wlan0 网卡过程,android WIFI网络驱动之wpa_supplicant程序详解
  4. 安装Python库包的多种方式
  5. rust(20)-字符
  6. sql查询结果集根据指定条件排序的方法
  7. vue使用class添加动态类
  8. 快点搜quickso.cn
  9. web前端都是自学成才吗?入行前端工程师的3种方式
  10. Linux系统的用途
  11. CCF NOI1149 N皇后问题
  12. javascript对象概念大全
  13. 托马斯微积分10版积分简表101 公式修正
  14. 数电课设——基于74系列芯片搭建的交通灯控制系统电路
  15. 6.4.3.4 -排除默认网关故障
  16. java流水号_Java生成流水号
  17. 华为路由器配置备忘录
  18. 正态分布的峰度和偏度分别为_关于偏度与峰度的一些探索
  19. Main Menu菜单栏消失解决
  20. Chrome和Chromium的区别

热门文章

  1. Excel表格显示身份证号格式问题
  2. STM32F107 USB otg U盘读写
  3. Intellij IDEA 注释模板设置
  4. java-php-python-ssm网上拍卖系统2021计算机毕业设计
  5. 独立开发者之路(二)
  6. 如何内网安装npm依赖包
  7. 他成功创业,做到中国水饺品类的隐形冠军,拥有门店近400家
  8. Python excel透视表
  9. 情报分析师助力打破大数据泡沫
  10. 网页信息抓取-网页信息采集器