当前位置:网站首页 > 软件教程 > 正文

mysql数据库最大连接数怎么修改?

作者:admin发布时间:2021-11-02分类:软件教程浏览:评论:0


导读:使用MySQL数据库的站点,当访问连接数过多时,就会出现"Toomanyconnections"的错误。出现这种错误有两种情况,一种是网站访问量实在太大,服务器已经负担不起,此时就应该考虑负载均衡或者其它减少服务器压力的办法。另一种情况就是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最大连接数

方式 一:    
02    
03    进到MySQL安装文件 开启MySQL环境变量 my.ini 或 my.cnf搜索 max_connections=100 改动为 max_connections=1000 服务项目里重起MySQL就可以    
04    
05    方式 二:    
06    
07    MySQL最大连接数默认设置是100手机客户端登陆:    
08    
09        MySQL -uusername -ppassword    
10    
11    设定新的MySQL最大连接数为200:    
12    
13        MySQL> set GLOBAL max_connections=200    
14    
15    表明目前运作的Query:    
16    
17        MySQL> show processlist    
18    
19    表明当今情况:    
20    
21        MySQL> show status    
22    
23    撤出手机客户端:MySQL> exit    
24    
25    查询当今MySQL最大连接数:MySQLadmin -uusername -ppassword variables    
26    
27    方式 三:    
28    
29    以centos 4.4 下边的MySQL 5.0.33 手工制作编译程序版本号为例子表明:    
30    
31        vi /usr/local/MySQL/bin/MySQLd_safe    
32    
33    寻找safe_MySQLd编写它,寻找MySQLd运行的那二行,在后面再加上主要参数 :    
34    
35        -O max_connections=1500    
36    
37    实际一点便是下边的具体位置:    
38    
39    用红色字体尤其代表:    
40    
41        then $NOHUP_NICENESS $ledir/$MySQLD     
42        $defaults --basedir=$MY_BASEDIR_VERSION     
43        --datadir=$DATADIR $USER_OPTION     
44        --pid-file=$pid_file     
45        --skip-external-locking     
46        -O max_connections=1500    
47        >> $err_log 2>&1 else     
48        eval "$NOHUP_NICENESS $ledir/$MySQLD     
49        $defaults --basedir=$MY_BASEDIR_VERSION     
50        --datadir=$DATADIR $USER_OPTION     
51        --pid-file=$pid_file     
52        --skip-external-locking $args     
53        -O max_connections=1500 >>    
54        $err_log 2>&1"     
55    
56    储存。    
57    
58        # service MySQLd restart     
59        # /usr/local/MySQL/bin/MySQLadmin -uroot -p variables     
60    
61    键入root数据库查询账户的登陆密码后可见到    
62    
63    max_connections 1500 即新修改早已起效。    
64    
65    也有一种方式 ,    
66    
67    改动源代码:    
68    
69    解除MySQL的源代码,进到里边的sql文件目录改动MySQLd.cc寻找下边一行:    
70    
71        {"max_connections", OPT_MAX_CONNECTIONS,     
72        "The number of simultaneous clients allowed.", (gptr*) &max_connections,     
73        (gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,     
74        0},     
75    
76    把它改成:    
77    
78        {"max_connections", OPT_MAX_CONNECTIONS,     
79        "The number of simultaneous clients allowed.", (gptr*) &max_connections,     
80        (gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,     
81        0},     
82    
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默认设置的一百个线程数是充足的。大家必须从程序流程上来考虑到。MySQL的默认设置最大连接数为100(N),具体给普通用户应用仅有N-一个,保存一个联接是交给超级用户应用的,避免联接布满了不容易把管理人员也踢出去。许多网址在运转的过程中都是发生线程数受到限制状况,我觉得十之八九并不是是网址的真正浏览量很大造成线程数超标准,大量是由于我们在设计方案网站源代码的情况下选用了不科学的设计构架或算法设计造成的。异常联接超限额很有可能缘故如下所示(天缘及时梳理不一定详细或无错讹仅作参考):

  1. 相近总数,时长,访问等数统计分析作用与源程序数据库查询同为一个数据信息室内空间时就非常容易发生。

  2. 繁杂的静态页尤其是客户每天访问都牵涉到多数据库查询或多表实际操作情况下也非常容易发生。

  3. 也有便是编程设计的不科学(例如繁杂计算,等候等实际操作置放在数据库查询互动个人行为正中间开展),或是程序流程存有释放出来BUG。

  4. 计算机系统配备太低却安裝太高版,太高配备的MySQL。

  5. 未选用缓存文件技术性。

  6. 数据库查询未通过提升或表格的制作以及繁杂。

这些一些缘故,都是会增加数据库查询的数据信息互动時间或提升互动频次。因此 ,假如大伙儿遇见这类难题,最先要考虑到程序流程是不是存有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);

可是有两个难题:

  1. 当应用长连接时(即connect以后一直不close),假如最终会启用mysql_close,要不要每一次都启用mysql_free_result呢?

  2. 当mysql_close调用以后,m_result的信息是不是还能够用。

先说一下结果:

  1. 务必每一次启用。由于通过检测,每一次mysql_store_result的表针全是不一样的,由此可见并非共享资源了同一块buf。

  2. 或是能够应用。通过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<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> >&) (db_openright.cpp:58) 7 ==9397==    by 0x8049F10: main (test.cpp:27)

标签:mysql数据库


欢迎 发表评论: