设为首页 收藏本站
查看: 389|回复: 0

[经验分享] mysql全局变量之max_connections & max_user_connections详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-19 08:38:12 | 显示全部楼层 |阅读模式
之前在网上看到很多关于max_conections & max_user_conenctions变量的解释,但是感觉都有些不太准确,要不就是说的很模糊,因此详读了mysql的官方文档6.3.4 Setting Account Resource Limits章节,并结合实验进行验证。

    仅供参考:如有遗误,望请海涵!


实验步骤如下:
    1. 启动mysql

    2. 创建测试环境所需的用户

    3. 查看及验证max_connections变量的意义

    4. 查看及验证max_user_connections变量的意义


启动mysql,命令如下:
    windows:C:\net start mysql

    linux: #service mysqld start


创建测试环境所需的用户
    [windows | linux] : mysql -uroot -p

    Enter password:******

    mysql> create user keyman@'127.0.0.1' identified by 'keyman';

    mysql> create user harry@'127.0.0.1' identified by 'harry';
    mysql> flush privileges;


查看及验证max_connections变量的含义
    1) 打开4个命令窗口[window1 & window2 & window3 & window4]

    2)window1上执行如下命令

        [windows | linux] : mysql -uroot -p

        Enter password:******

        mysql> select @@max_connections;

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

        |  max_connections  |
        +-------------------+

        |                0  |

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

        //可以看到此时的值(默认值)是0,即不做限制

        mysql> set @@global.max_connections=2;   
        mysql> select @@max_connections;
        +-------------------+  
        |  max_connections  |
        +-------------------+
        |                2  |
        +-------------------+
        mysql> exit
        [windows | linux] : mysql -uroot -p
        Enter password:******
    3) window2上执行如下命令

        [windows | linux] : mysql -ukeyman -p
        Enter password:******
        mysql>
    4) window3上执行如下命令
        [windows | linux] : mysql -uharry -p
        Enter password:*****
        ERROR 1040(08004):Two many connections
        //由于max_connections的值设置为2,因此此时无法在进行连接,但是此时仍然不明确
        //为什么无法连接,继续测试以进一步验证无法连接的原因。
    5)window3上执行如下命令
        注意:4)步骤无法登陆mysql,此步骤可直接在4)的基础之上执行如下命令,也可以再新打开一个命令窗口。
        [windows | linux] : mysql -ukeyman -p
        Enter password:******
        mysql>
        //奇迹发生了,keyman用户竟然连接上了。
    6)window4上执行如下命令
        [windows | linux] : mysql -ukeyman -p
        Enter password:******
        mysql>
        //奇迹再次发生,keyman用户的第三个连接竟然又连接上了。

    综上6步,max_connections变量的意义显而易见。

查看及验证max_user_connections变量的含义
    1) 打开三个命令窗口[window1 & window2 & window3 & window4]
    2)window1上执行如下命令
        [windows | linux] : mysql -uroot -p
        Enter password:******
        mysql> select @@max_user_connections;
        +------------------------+  
        |  max_user_connections  |
        +------------------------+
        |                     0  |
        +------------------------+
        //可以看到此时的值(默认值)是0,即不做限制
        mysql> set @@global.max_user_connections=2;   
        mysql> select @@max_user_connections;
        +------------------------+  
        |  max_user_connections  |
        +------------------------+
        |                     2  |
        +------------------------+
        mysql> exit
        [windows | linux] : mysql -uroot -p
        Enter password:******
    3) window2上执行如下命令
        [windows | linux] : mysql -uroot -p
        Enter password:******
        mysql>
    4) window3上执行如下命令
        [windows | linux] : mysql -uroot -p
        Enter password:******
        ERROR 1203(42000):User root already has more then 'max_user_connections' active connections
        //由于max_connections的值设置为2,因此此时无法在进行连接,但是此时仍然不明确
        //为什么无法连接,继续测试以进一步验证无法连接的原因。
    5)window3上执行如下命令
        注意:4)步骤无法登陆mysql,此步骤可直接在4)的基础之上执行如下命令,也可以再新打开一个命令窗口。
        [windows | linux] : mysql -ukeyman -p
        Enter password:******
        mysql>
        //奇迹发生了,keyman用户竟然连接上了
    6) window4上执行如下命令
        [windows | linux] : mysql -uharry -p
        Enter password:******
        mysql>
        //奇迹再次发生了,harry用户竟然连接上了

    综上6步,max_user_connections变量的意义显而易见。

将max_user_connections变量的值与用户关联
    1) 打开三个命令窗口[window1 & window2 & window3 & window4]
    2)window1上执行如下命令
        [windows | linux] : mysql -uroot -p
        Enter password:******
        mysql> select @@max_user_connections;
        +------------------------+  
        |  max_user_connections  |
        +------------------------+
        |                     0  |
        +------------------------+
        //mysql> show grants;命令也可以查看。
        //可以看到此时的值(默认值)是0,即不做限制
        mysql> grant usage on *.* to keyman@'127.0.0.1' with max_user_connections 2;   
        mysql> select @@max_user_connections;
        +------------------------+  
        |  max_user_connections  |
        +------------------------+
        |                     2  |
        +------------------------+
        mysql> exit
        [windows | linux] : mysql -ukeyman -p
        Enter password:******
    3) window2上执行如下命令
        [windows | linux] : mysql -ukeyman -p
        Enter password:******
        mysql>
    4) window3上执行如下命令
        [windows | linux] : mysql -ukeyman -p
        Enter password:******
        ERROR 1203(42000):User keyman already has more then 'max_user_connections' active connections
        //由于max_connections的值设置为2,因此此时无法在进行连接,但是此时仍然不明确
        //为什么无法连接,继续测试以进一步验证无法连接的原因。
    5)window3上执行如下命令
        注意:4)步骤无法登陆mysql,此步骤可直接在4)的基础之上执行如下命令,也可以再新打开一个命令窗口。
        [windows | linux] : mysql -uroot -p
        Enter password:******
        mysql> select @@max_user_connections;
        +------------------------+  
        |  max_user_connections  |
        +------------------------+
        |                     0  |
        +------------------------+
        //经过验证,在三个窗口中同时登陆root账户,没有任何问题。


    如果你坚持看完了这篇文章,那么很荣幸能够和你分享 最终结论。见证奇迹的时刻:
        结论1:max_connections变量的意义是 限制当前mysql server中 允许同时连接的不同用
              户数,并不对相同用户的多次连接进行限制
        结论2:max_user_connections变量的意义是 限制当前mysql server中 允许同时连接的相
              同用户的连接数,不对连接的不同用户数进行限制
        结论3:对max_connections变量的设置,由于是设置的全局变量,因此均是对所有用户生效
        结论4:对max_user_connections的设置,分为以下两种情况;
            1. 针对所有用户有效
                mysql> set @@global.max_user_connections=2;
            2. 针对单个用户有效
                mysql> grant usage on *.* to keyman@127.0.0.1 with max_user_connections 2;
                //此时的设置将仅对keyman用户有效。

        注:与max_user_connections参数类似的还有max_queries_per_hour,max_updates_per_hour
            及max_connections_per_hours,见名知意,用法同上。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-68351-1-1.html 上篇帖子: mysql主从复制 下篇帖子: MYSQL主从同步+读写分离 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表