怎么查看 MySQL最大连接数

使用 MySQL 数据库的站点,当访问连接数过多时,就会出现 "Too many connections" 的错误。出现这种错误有两种情况,一种是网站访问量实在太大,服务器已经负担不起,此时就应该考虑负载均衡或者其它减少服务器压力的办法。另一种情况就是 MySQL 的最大连接数设置得太小,当访问量稍大就出现连接过多的错误。win7下配置PHP+Apache+Mysql运行环境

MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看

mysql> show variables like 'max_connections';

此命令将得到类似以下的输出结果:

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

| Variable_name | Value |

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

| max_connections | 2000 |

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

1 row in set (0.00 sec)

要对 mysql 的最大连接数进行修改,只需要在 my.cnf 配置文件里面修改 max_connections 的值,然后重启 mysql 就行。如果 my.ini 文件中没有找到 max_connections 条目,可自行添加以下条目

max_connections = 200

修改MySQL最大连接数

01

方法一:

02

02

03

03 进入MySQL安装目录 打开MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MySQL即可

04

04

05

05 方法二:

06

06

07

07 MySQL最大连接数默认是100客户端登录:

08

08

09

09 MySQL -uusername -ppassword

10

10

11

11 设置新的MySQL最大连接数为200:

12

12

13

13 MySQL> set GLOBAL max_connections=200

14

14

15

15 显示当前运行的Query:

16

16

17

17 MySQL> show processlist

18

18

19

19 显示当前状态:

20

20

21

21 MySQL> show status

22

22

23

23 退出客户端:MySQL> exit

24

24

25

25 查看当前MySQL最大连接数:MySQLadmin -uusername -ppassword variables

26

26

27

27 方法三:

28

28

29

29 以centos 4.4 下面的MySQL 5.0.33 手工编译版本为例说明:

30

30

31

31 vi /usr/local/MySQL/bin/MySQLd_safe

32

32

33

33 找到safe_MySQLd编辑它,找到MySQLd启动的那两行,在后面加上参数 :

34

34

35

35 -O max_connections=1500

36

36

37

37 具体一点就是下面的位置:

38

38

39

39 用红字特别说明:

40

40

41

41 then $NOHUP_NICENESS $ledir/$MySQLD

42

42 $defaults --basedir=$MY_BASEDIR_VERSION

43

43 --datadir=$DATADIR $USER_OPTION

44

44 --pid-file=$pid_file

45

45 --skip-external-locking

46

46 -O max_connections=1500

47

47 >> $err_log 2>&1 else

48

48 eval "$NOHUP_NICENESS $ledir/$MySQLD

49

49 $defaults --basedir=$MY_BASEDIR_VERSION

50

50 --datadir=$DATADIR $USER_OPTION

51

51 --pid-file=$pid_file

52

52 --skip-external-locking $args

53

53 -O max_connections=1500 >>

54

54 $err_log 2>&1"

55

55

56

56 保存。

57

57

58

58 # service MySQLd restart

59

59 # /usr/local/MySQL/bin/MySQLadmin -uroot -p variables

60

60

61

61 输入root数据库账号的密码后可看到

62

62

63

63 max_connections 1500 即新改动已经生效。

64

64

65

65 还有一种方法,

66

66

67

67 修改原代码:

68

68

69

69 解开MySQL的原代码,进入里面的sql目录修改MySQLd.cc找到下面一行:

70

70

71

71 {"max_connections", OPT_MAX_CONNECTIONS,

72

72 "The number of simultaneous clients allowed.", (gptr*) &max_connections,

73

73 (gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,

74

74 0},

75

75

76

76 把它改为:

77

77

78

78 {"max_connections", OPT_MAX_CONNECTIONS,

79

79 "The number of simultaneous clients allowed.", (gptr*) &max_connections,

80

80 (gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,

81

81 0},

82

82

83

83 存盘退出,然后./configure ;make;make install可以获得同样的效果。以上的相关内容就是对修改MySQL最大连接数的3种方法的介绍,望你能有所收获。

MySQL服务器最大连接数相关知识

最近网站出现 User 数据库名称 has already more than 'max_user_connections' active connections 的报错,网站瘫痪。有必要研究下这个问题。

max_user_connections 是 MySQL 用户连接数的最大值设置,整段语句的意思是:服务器的 MySQL 的最大连接数参数设置不足。解决方法:修改 MySQL 安装目录下 my.ini 或者 my.cnf 文件内的 max_user_connections 参数的数值,重启 MySQL 服务器。

但是正常来说,MySQL默认的100个连接数是足够的。我们需要从程序上去考虑。MySQL的默认最大连接数为100(N),实际给普通用户使用只有N-1个,保留一个连接是留给超级管理员使用的,防止连接占满了不会把管理员也踢出来。很多网站在运行的时候都会出现连接数受限现象,我认为十之八九并非是网站的真实访问量太大导致连接数超标,更多是因为我们在设计网站程序的时候采用了不合理的设计架构或数据结构引起的。非正常连接超限可能原因如下(天缘即时归纳未必完整或无错讹仅供参考):

类似人数、在线时间、浏览数等统计功能与主程序数据库同属一个数据空间时就很容易出现。

复杂的动态页尤其是用户每次浏览都涉及到多数据库或多表操作时候也很容易出现。

还有就是程序设计的不合理(比如复杂运算、等待等操作放置在数据库交互行为中间进行),或者程序存在释放BUG。

计算机硬件配置太低却安装太高版、太高配置的MySQL。

未采用缓存技术。

数据库未经过优化或表格设计及其复杂。

等等一些原因,都会延长数据库的数据交互时间或增加交互次数。所以,如果大家遇到这类问题,首先要考虑程序是否存在BUG导致连接释放失败,再次就是考虑优化软硬件。当然修改MySQL连接数也是软件优化的操作方法之一,希望大家都能够本着学习的态度通过研究一下自身的原因从而解决这一问题。如果实在是找不到原因,那就只好先修改连接数,暂缓定位真实原因了。

关于PHP的数据库持久连接 mysql_pconnect

PHP程序员应该都知道连接MySQL数据库可以使用mysql_pconnect(永久连接)函数,使用数据库永久连接可以提高效率,但是实际应用中数据库永久连接往往会导致出现一些问题,通常的表现就是在大访问量的网站上时常发生断断续续的无法连接数据库的情况,出现类似"Too many connections in ..."的错误提示信息,重新启动服务器又正常了,但过不了一会儿又出现同样的故障。对于这些问题的成因,恐怕就不是每个人都能说清楚的了,虽然PHP文档里有一些相关资料,但是解释的并不浅显易懂,这里我厚着脸皮试图做一个简单的讨论,所述观点不见得全都正确,欢迎大家反馈意见。

首先看看数据库永久连接的定义:永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP 将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓"相同"的连接是指用相同的用户名和密码到相同主机的连接。

PHP使用永久连接方式操作MySQL是有前提的:就是PHP必须安装为多线程或多进程Web服务器的插件或模块。最常见的形式是把PHP用作多进程Apache服务器的一个模块。对于一个多进程的服务器,其典型特征是有一个父进程和一组子进程协调运行,其中实际生成Web页面的是子进程。每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。这也就是说当相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在开启了一个永久连接后,所有不同子进程请求SQL服务的后继页面都能够重新使用这个已经建立的 SQL服务器连接。它使得每个子进程在其生命周期中只做一次连接操作,而非每次在处理一个页面时都要向 SQL 服务器提出连接请求。每个子进程将对服务器建立各自独立的永久连接。PHP本身并没有数据库连接池的概念,但是Apache有进程池的概念, 一个Apache子进程结束后会被放回进程池, 这也就使得用mysql_pconnect打开的的那个mysql连接资源可以不被释放,而是依附在相应的Apache子进程上保存到了进程池中。于是在下一个连接请求时它就可以被复用。一切看起来似乎都很正常,但是在Apache并发访问量大的时候,如果使用mysql_pconnect,会由于之前的Apache子进程占用的MySQL连接没有close, 很快使MySQL达到最大连接数,使得之后的请求可能得不到响应。

上面的部分文字是摘抄自PHP文档,看起来可能还是有些文绉绉的不好理解,那么我就用大白话再举一个例子来说明问题:

假设Apache配置最大连接数为1000,MySQL配置最大连接数为100,当Apache服务器接到200个并发访问的时候,其中100个涉及到数据库访问,剩下的100个不涉及数据库访问,因为这个时候还不存在可用的数据库连接,所以这里面涉及到数据库访问的100个并发会同时产生100个数据库永久连接,达到了数据库最大连接数,当这些操作没有结束的时候,任何其他的连接都无法再获得数据库连接,当这些操作结束了,相应的连接会被放入进程池,此时Apache的进程池里就有了200个空闲的子进程,其中100个是带有数据库连接的,由于Apache会为访问请求随机的挑选空闲子进程,所以你得到的子进程很可能是不包含数据库连接的那100个中的一个,而数据库连接已经达到了最大值,你也不可能成功的建立新的数据库连接,唉,你便只好不停的刷新页面,哪个时候运气好,碰巧分配到了带有数据库连接的子进程,才能正常浏览页面。如果是大访问量的网站来说,任何时候都可能存在大量的并发,所以浏览者可能就会不停的发现无法连接数据库的现象了。

或许你会说,我们把Apache和MySQL的最大连接数调成一样大不就可以了么?是的,合理的调整这个最大连接数某种程度上会避免这个问题的发生,但是Apache和MySQL的负载能力是不同的,如果按照Apache的负载能力来设置,对于MySQL来说,这个最大连接数就偏大,会产生大量的MySQL数据库永久连接,打个比方,就好像和平时代还要养活一个几百万的军队一样,其开销得不偿失;而如果按照Mysql的负载能力设置,对于Apache来说,这个最大连接数就偏小,有点杀鸡牛刀的感觉,无法发挥Apache的最大效率。

所以按照PHP手册上的介绍,只适合在并发访问不大的网站上使用数据库永久连接,但对于一个并发访问不大的网站来说,使用数据库永久连接带来的效率提高似乎没有太大的意义,从这个角度上来看,我觉得PHP中的数据库永久连接基本上是一个鸡肋的角色,如果你一定要使用数据库连接池的概念,可以尝试一下sqlrelay或者Apache本身提供的mod_dbd,说不定会有惊喜。

关于mysql_free_result和mysql_close

之前用mysql的时候一直是在用短链接,调用mysql_store_result获取一次数据之后就直接调用:

1

mysql_free_result(m_result);

2

mysql_close(m_Database);

但是有两个问题:

当使用长连接时(即connect之后一直不close),如果最后会调用mysql_close,需不需要每次都调用mysql_free_result呢?

当mysql_close调用之后,m_result的数据是否还可以用。

先说一下结论:

必须每次调用。因为经过测试,每次mysql_store_result的指针都是不同的,可见并不是共享了同一块buf。

还是可以使用。经过valgrind扫描,只调用mysql_close的扫描结果是:

1

==9397== 16,468 (88 direct, 16,380 indirect) bytes in 1 blocks are definitely lost in loss record 4 of 5

2

==9397==    at 0x40219B3: malloc (vg_replace_malloc.c:195)

3

==9397==    by 0x8053EA2: my_malloc (in /data/home/dantezhu/appbase/application/platform/openqqcom/share/db_openright/test/test)

4

==9397==    by 0x806D314: mysql_store_result (in /data/home/dantezhu/appbase/application/platform/openqqcom/share/db_openright/test/test)

5

==9397==    by 0x804BB04: CMySQLCppClient::Result(st_mysql_res*&) (mysql_cpp_client.cpp:127)

6

==9397==    by 0x804AB58: CDBOpenRight::GetUinsByApp(unsigned int, std::set, std::allocator >&) (db_openright.cpp:58)

7

==9397==    by 0x8049F10: main (test.cpp:27)

本站vip会员 请加入织梦58 VIP②群 PS:加入时备注用户名或昵称

普通注册会员或访客 请加入织梦58 技术交流②群

mysql 查看修改连接数据库_mysql查看最大连接数和修改mysql数据库最大连接数方法...相关推荐

  1. mysql sql查询时区_MySQL查看和修改时区的方法

    今天发现有一个程序插入的时间不对,而该字段是配置的默认值 CURRENT_TIMESTAMP,初步判断是数据库的时区设置问题. 查看时区 登录数据库查看时区配置: mysql> show var ...

  2. mysql查看当前字符集_Mysql 查看字符集设置

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...

  3. mysql 查看编码方式_Mysql查看编码方式专题

    Mysql查看编码方式专题 一. 查看数据库的字符集 show variables like 'character\_set\_%'; 输出: +--------------------------+ ...

  4. 查看mysql运行的配置文件_MySQL 查看当前使用的配置文件my.cnf的方法

    my.cnf是MySQL启动时加载的配置文件,一般会放在mysql的安装目录中,用户也可以放在其他目录加载.安装mysql后,系统中会有多个my.cnf文件,有些是用于测试的.使用locate my. ...

  5. 找mysql软件的配置文件_mysql 查看当前使用的配置文件my.cnf的方法

    my.cnf是mysql启动时加载的配置文件,一般会放在mysql的安装目录中,用户也可以放在其他目录加载. 安装mysql后,系统中会有多个my.cnf文件,有些是用于测试的. 使用locate m ...

  6. mysql命令查看过程内容_mysql查看存储过程命令

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  7. mysql cmd 删除表_MySQL查看表和清空表的常用命令总结

    查看Mysql数据库表 进入MySQL Command line client下 查看当前使用的数据库: mysql>select database(); mysql>status; my ...

  8. mysql 查看校对集_mysql 查看字符集和校对规则

    MySQL 服务器可以支持多种字符集,在同一台服务器.同一个数据库.甚至同一个表的不同字段都可以指定使用不同的字符集,相比Oracle 等其他数据库管理系统,在同一个 数据库只能使用相同的字符集,My ...

  9. mysql用户replace权限_mysql查看用户的权限脚本

    1.安装mysql支持python包 yum -y install mysql-connector-python 2.查看MySQL 用户权限的Python脚本 vi py_priv.py #!/us ...

  10. 怎么查看mysql是否锁表_MySQL查看是否锁表

    MySQL查看是否锁表的方法:首先进入命令窗口:然后通过执行命令"show engine innodb status\G;"查看造成死锁的sql语句,并分析索引情况即可. 可直接在 ...

最新文章

  1. 面试的27个经典问题
  2. 2020年这10大机器学习研究最具影响力:为什么?接下来如何发展?
  3. 软件网络协议测试,网络协议测试方法是什么
  4. navicat er图没有连线_迁徙图?流向图?城市关系强度图?
  5. UpdataPanel学习之 RenderMode
  6. Spring : 基于tx标签的声明式事物
  7. 如何编写代码解决问题,初学者指南
  8. css与jquery、图标字体、常用数据
  9. php:两个文件夹递归地比较,没有的文件自动复制过去
  10. Redis 6.0 源码阅读笔记(6) -- Set 数据类型源码分析
  11. 设计模式之行为型备忘录模式
  12. Android的banner(轮播图)的实现
  13. 各学科领域入门书籍推荐
  14. VS2013 下载地址
  15. 去水印原理_图片去水印|视频去水印
  16. win7旗舰版 OEM KEY
  17. 程序员必备十款开发工具,会用的可以召唤神龙了!
  18. 简单易学的win10安装教程,值得收藏
  19. 白杨SEO:从百度一下到抖音搜索关键词进行查找信息,挖掘用户需求的新机会你知道吗?
  20. gin 【日志记录】每天一个日志文件

热门文章

  1. 建立网络安全新生态,网络态势感知至关重要
  2. java去除网页中的广告和导航等信息_**css+html纯css怎样去除导航子菜单中的默认背景?**...
  3. redismanager 获取不到yml中的密码_恋爱物语APP:在城市的孤独中,获取真爱密码...
  4. 远程桌面中转,基于 UltraVNC Repeater(中继器)的远程桌面服务搭建,用于复杂网络环境
  5. 16c语言第七届省赛,第十六届青少年信息学奥林匹克联赛初赛试题(附答案)
  6. base64编码 vba_[VBA]Base64编码和Base64解码
  7. java 截取掉数字前面的0_java 保留字符串数字的位数,不够前面补0
  8. webpack 无法加载文件 C:\Users\User\AppData\Roaming\npm\webpack.ps1,因为在此系统上禁止运行脚本。
  9. 登陆界面上下左右居中自适应屏幕显示的简单实现
  10. oc55--ARC单个对象的内存管理