mysql全局变量之max_connections & max_user_connections详解

之前在网上看到很多关于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 [email protected]‘127.0.0.1‘ identified by ‘keyman‘;

mysql> create user [email protected]‘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 [email protected]‘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 [email protected] with max_user_connections 2;

//此时的设置将仅对keyman用户有效。

mysql全局变量之max_connections & max_user_connections详解

时间: 2024-10-08 20:27:12

mysql全局变量之max_connections & max_user_connections详解的相关文章

深入MySQL用户自定义变量:使用详解及其使用场景案例

一.前言 在前段工作中,曾几次收到超级话题积分漏记的用户反馈.通过源码的阅读分析后,发现问题出在高并发分布式场景下的计数器上.计数器的值会影响用户当前行为所获得积分的大小.比如,当用户在某超级话题下连续第n(n即计数器的值)次进行转发帖子时,将会获得与n相关的分数.然而,在第一次改进后问题依然存在.所以,这次在之前的基础上,通过使用MySQL变量的途径来解决该问题. 二.到底MySQL的变量分哪几类? MySQL变量一共分为两大类:用户自定义变量和系统变量.如下: 用户自定义变量 局部变量 会话

图解MYSQL JOIN ON,SQL JOIN 详解,数据库sql join语句

对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams 解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表. Table A 是左边的表. Table B 是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示

CentOS 6.5 MySQL/MariaDB数据备份与恢复备份详解

MySQL/MariaDB数据备份与恢复备份 数据对我们来说再重要不过了,那我们如何做到对数据尽可能的安全呢,当我们的数据丢失了那又该怎么做呢,所以说数据备份对我们的数据安全性来说太重要了. 数据对我们来说再熟悉不过了,也最平常不过了,我们每天都在接触各色各样的数据,数据记录了我们平常相关的业务信息,所以数据对于我们来说是很重要的,这么重要的数据如果我们的数据丢失了那我们是不是相关的业务都没法进行了呢,这应该是个很麻烦的问题,那我们怎么保护我们的数据的安全呢,这就要用到我们的数据备份了. 如何执

Mysql中关于 group_concat函数详解

group_concat()主要功能:能将相同的行组合起来 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 Sql代码   select * from aa; +------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||3 | 200 ||3 | 500 |+------+---

MYSQL常用内置函数详解说明

函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音作为拼音pinyin字段的值,如:duoyinzi(ā,á,ǎ,à,a),想提取ā作为pinyin的值:数据有好几万条,不想用程序一条条处理,只想用一个sql来实现,后来了解了下MYSQL常用内置函数,是可以做到的:sql:UPDATE ol_zidian set pinyin=LEFT(duoyi

mysql中event的用法详解

一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程. 二.适用范围对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理. 例如:使用event在每月的1日凌晨1点自动创建下个月需要使用的三张表. 三.使用权限单独使用event调用SQL语句时,查看和创建

mysql TIMESTAMP(时间戳)详解

TIMESTAMP的变体 1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  在创建新记录和修改现有记录的时候都对这个数据列刷新 2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP  在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它 3,TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  在创建新记录的时候把这个字段设置为0,以后修改时刷新它 4

MySql 安装及初级使用详解

1. sudo apt-get install mysql-server, input administrator password , '123' 2. enter mysql promot in command line, 'mysql -u root -p', input password 3. create database "CREATE DATABASE xoops:" 4. 允许root远程登陆: 从所有主机:grant all privileges on *.* to

MySQL数据类型以及基本使用详解

MySQL数据类型以及基本使用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL服务器的主要组件 我们知道MySQL的主要组件主要是由服务端(mysqld)和客户端(mysql)组成的.它们都共用一个配置文件(通常叫做my.cnf),这个配置文件很独特,它需要使用中括号括起来标明是为哪种组件使用的,例如[mysql]下面的指令就表示为客户端配置的参数,如果[mysqld]下面的指令就表示为服务端配置的参数.其实MySQL的客户端组件有很多个,本篇博客是用的my