• [转]怎么查看和修改 MySQL 的最大连接数?


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

     

     
     

    设置max_connections

    (这个办法在debian+mysql  Ver 12.22 Distrib 4.0.22, for pc-linux (i386)
    里实验了)
    设置办法是在my.cnf文件中,添加下面的最后红色的一行: 
    [mysqld] 
    port=3306 
    #socket=MySQL 
    skip-locking 
    set-variable = key_buffer=16K 
    set-variable = max_allowed_packet=1M 
    set-variable = thread_stack=64K 
    set-variable = table_cache=4 
    set-variable = sort_buffer=64K 
    set-variable = net_buffer_length=2K 
    set-variable = max_connections=32000 
    (在院里的DELL机器mysql4.0里的语法不同
    max_connecionts=2000
    直接这么写就好了



    修改完毕后,重启MySQL即可。当然,为了确保设置正确,应该查看一下max_connections。 

    注意: 
    1、虽然这里写的32000。但实际MySQL服务器允许的最大连接数16384; 
    2、除max_connections外,上述其他配置应该根据你们系统自身需要进行配置,不必拘泥; 
    3、添加了最大允许连接数,对系统消耗增加不大。 
    4、如果你的mysql用的是my.ini作配置文件,设置类似,但设置的格式要稍作变通。 

    用mysqld --help 可以查看到max_connections 变量。 
    或者 mysql -uuser -p
    后mysql>show variables;
    也会看到max_connections 。   

    下面是修改张老师 的redhat9的方法:

    先是mysql -uw01f -p
    mysql>show variables;
    看到max_connections 为100
    mysql>exit;
    vi /etc/my.cnf
        [mysqld]
    set-variable=max_connections=250  #加入这些内容
    :wq

    /etc/init.d/mysqld restart
    好了,行了。



    下面的是抄的,我用不了
    mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些, 有两种办法可以修改最大连接数,一种是修改safe_mysqld,另一种是直接修改原代码并重新编译。下面我们就分别介绍这两种方法: 

    1.修改safe_mysqld 
    找到safe_mysqld编辑它,找到mysqld启动的那两行,在后面加上参数 : 

    -O max_connections=1000 

    例如 :(其中前面有---的是原来的内容,而+++是修改过以后的) 
    --- safe_mysqld.orig Mon Sep 25 09:34:01 2000 
    +++ safe_mysqld Sun Sep 24 16:56:46 2000 
    @@ -109,10 +109,10 @@ 
    if test "$#" -eq 0 
    then 
    nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR / 
    - --skip-locking >> $err_log 2>&1 
    + --skip-locking -O max_connections=1000 >> $err_log 2>&1 
    else 
    nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR / 
    - --skip-locking "$@" >> $err_log 2>&1 
    + --skip-locking "$@" -O max_connections=1000 >> $err_log 2>&1 
    fi 
    if test ! -f $pid_file # This is removed if normal shutdown 
    then 
    然后关闭mysql重启它,用 
    /mysqladmin所在路径/mysqladmin -uroot -p variables 
    输入root数据库账号的密码后可看到 
    | max_connections | 1000 | 
    即新改动已经生效。 

    2.修改原代码 

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

    { "max_connections", (long*) &max_connections,1000,1,16384,0,1}, 

    把它改为: 

    { "max_connections", (long*) &max_connections,1000,1,16384,0,1}, 

    存盘退出,然后./configure ;make;make install可以获得同样的效果。

    查看Mysql连接数
    登录到mysql客户端后,使用status命令也能获得thread连接数以及当前连接的id
    或者用
    Mysql代码
        show full processlist   
    看一下所有连接进程,注意查看进程等待时间以及所处状态 是否locked
    如果进程过多,就把进程打印下来,然后查看
    Mysql代码
        mysql -e 'show full processlist;' > 111  
    查找非locked的进程,一般就是当前执行中卡死,导致后面的进程排队的原因。
    另外,修改mysql最大连接数的方法:
    编辑MySQL(和PHP搭配之最佳组合)配置文件 
    my.cnf 或者是 my.ini
    在[MySQL(和PHP搭配之最佳组合)d]配置段添加:
    Apache代码
        max_connections = 1000  
    保存,重启MySQL(和PHP搭配之最佳组合)服务。
    然后用命令:
    MySQL(和PHP搭配之最佳组合)admin -uroot -p variables
    输入root数据库账号的密码后可看到
    Linux代码
        | max_connections | 1000 | 


    修改MySQL默认最大连接数
    MYSQL数据库安装完成后,默认
    最大连接数是100,一般流量稍微大一点的论坛或网站
    这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个
    方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100   修改为 max_connections=1000 服务里重起MYSQL即可
    方法二:MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppassword
    设置新的最大连接数为200:mysql> set GLOBAL max_connections=200
    显示当前运行的Query:mysql> show processlist
    显示当前状态:mysql> show status
    退出客户端:mysql> exit
    查看当前最大连接数:mysqladmin -uusername -ppassword variables

    方法三:以centos 4.4 下面的mysql 5.0.33 手工编译版本为例说明:
    vi /usr/local/mysql/bin/mysqld_safe
    找到safe_mysqld编辑它,找到mysqld启动的那两行,在后面加上参数 :
    -O max_connections=1500
    具体一点就是下面的位置:
    用红字特别说明:
    then $NOHUP_NICENESS $ledir/$MYSQLD
    $defaults --basedir=$MY_BASEDIR_VERSION
    --datadir=$DATADIR $USER_OPTION
    --pid-file=$pid_file
    --skip-external-locking
    -O max_connections=1500
    >> $err_log 2>&1 else
    eval "$NOHUP_NICENESS $ledir/$MYSQLD
    $defaults --basedir=$MY_BASEDIR_VERSION
    --datadir=$DATADIR $USER_OPTION
    --pid-file=$pid_file
    --skip-external-locking $args
    -O max_connections=1500 >>
    $err_log 2>&1"
    保存。
    # service mysqld restart
    # /usr/local/mysql/bin/mysqladmin -uroot -p variables
    输入root数据库账号的密码后可看到
    max_connections 1500 即新改动已经生效。
    还有一种方法,
    修改原代码:
    解开MySQL的原代码,进入里面的sql目录修改mysqld.cc找到下面一行:
    {"max_connections", OPT_MAX_CONNECTIONS,
    "The number of simultaneous clients allowed.", (gptr*) &max_connections,
    (gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,
    0},
    把它改为:
    {"max_connections", OPT_MAX_CONNECTIONS,
    "The number of simultaneous clients allowed.", (gptr*) &max_connections,
    (gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,
    0},
    存盘退出,然后./configure ;make;make install可以获得同样的效果。

    1、查看当前所有连接的详细资料:
    mysqladmin -uroot -proot processlist
    D:MySQLin>mysqladmin -uroot -proot processlist
    +-----+------+----------------+---------+---------+------+-------+------------------+
    | Id | User | Host | db | Command | Time | State | Info |
    +-----+------+----------------+---------+---------+------+-------+------------------+
    | 591 | root | localhost:3544 | bbs | Sleep | 25 | | |
    | 701 | root | localhost:3761 | | uery | 0 | | show processlist |
    +-----+------+----------------+---------+---------+------+-------+------------------+

    2、只查看当前连接数(Threads就是连接数.):
    mysqladmin -uroot -proot status
    D:MySQLin>mysqladmin -uroot -proot status
    Uptime: 2102 Threads: 3 Questions: 15531 Slow queries: 0 Opens: 0 Flush tab
    les: 1 Open tables: 61 Queries per second avg: 7.389

    3、修改mysql最大连接数:
    打开my.ini,修改max_connections=100(默认为100)。
     
    命令: show processlist; 
    如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。 
    show processlist;只列出前100条,如果想全列出请使用show full processlist;
  • 相关阅读:
    epoll精髓【epoll】
    linux下调试core的命令,察看堆栈状态命令 摘录(http://blog.csdn.net/yearn520/article/details/6663265)
    使用epoll 在 linux 上开发高性能应用服务器【epoll】
    linux下epoll如何实现高效处理百万句柄的[转]【epoll】
    log4cplus入门
    非阻塞式服务器和客户端程序(TCP)【简单的原理例子】
    Linux有用的命令记录
    在Linux上的使用开源C++日志库log4cplus
    静态库和动态库的区别
    localtime多线下不安全,localtime_r线程安全
  • 原文地址:https://www.cnblogs.com/helloyb/p/3392458.html
Copyright © 2020-2023  润新知