【MySQL】MySQL 5.6 参数之 extra_port

一 前言
    作为MySQL DBA, 在运维MySQL的工作过程中,常常遇到Too many connections这个错误,这时作为数据库维护人员都不能登陆数据库进行维护 是多么窘迫的事。可能有人会说可以修改配置文件,然后重启数据库来解决。恩,不过这个是很多种解决方法中 可用性最差的一种,本文介绍通过 5.6 新的特性--管理端口 来解决这个问题。
二 认识 extra_port
   MySQL 在5.6.14 版本之后引入一个参数extra_port 用来解决too many connections的问题。
percona 官方介绍:
从官方文档介绍来看,在MySQL启动的时候使用该参数指定一个端口号(不要和正常的数据库服务端口冲突),Percona Server会监听来自该端口的请求。启用该参数可以解决使用thread_pool特性时,由于所有的连接池worker忙于处理慢querey或者被锁定导致DBA无法通过正常的端口连接DB, 以便DBA可以正常维护数据库。

具体用法如下:

mysql --port='extra-port-number' --protocol=tcp 

Maridb 官方介绍 (和percona的介绍类似,读者朋友可以自己翻译)

Description: Extra port number to use for tcp-connections in a one-thread-per-connection manner. If set to 0, no other port is used. Introduced for the MariaDB 5.1 threadpool. 

extra_max_connections  该参数主要是控制通过管理端口可以创建多少个连接。
官方介绍:
   "This variable can be used to specify the maximum allowed number of connections plus one extra SUPER users connection on the extra_port. This can be used with the extra_port variable to access the server in case no new connections can be established due to all worker threads being busy or being locked when pool-of-threads feature is enabled."
三 extra_port 测试
   测试环境:5.6.26-74.0-log Percona Server
   参数设置:

max_connections = 1

extra_max_connections = 1

extra_port=13306

通过上面两个参数,来设置整个数据库的连接数。通过上面的参数配置,最多可以创建4个连接。
测试过程,通过使用下面的命令,尝试连接数据库:
场景1 模拟业务连接数据库,在两个不同的session下尝试连接 

  1. mysql -uyang -pyang -h127.0.0.1 -P3306

场景2 模拟DBA连接数据库,在两个不同的session下尝试连接

  1. mysql -uroot -h127.0.0.1 -P3306

场景3 模拟DBA连接数据库,在两个不同的session下尝试连接

  1. mysql -S /srv/my_3306/run/mysql.sock

场景4 占满数据库的所有连接数,然后使用extra_port 端口以root身份连接

  1. mysql --port=13306 --protocol=tcp -uroot -h127.0.0.1

场景5 占满数据库的所有连接数,然后使用extra_port 端口以业务身份连接

  1. mysql --port=13306 --protocol=tcp -uyang -pyang -h127.0.0.1

场景6 这次不指定通信协议,尝试连接

  1. mysql --port=13306 -uyang -pyang -h127.0.0.1

场景7 模拟DBA和业务同时连接数据库,在两个不同的session下尝试连接

  1. mysql -uyang -pyang -h127.0.0.1 -P3306
    mysql -S /srv/my_3306/run/mysql.sock
    mysql -uroot -h127.0.0.1 -P3306 

    测试的结果
          场景1,只能连接1次,第2次报错 ERROR 1040 (HY000): Too many connections
          场景2,只能连接2次,第3次报错 ERROR 1040 (HY000): Too many connections
          场景3,只能连接2次,第3次报错 ERROR 1040 (HY000): Too many connections
          场景4,可以连接2次,第3次报错 ERROR 1040 (HY000): Too many connections
          场景5,无法连接,提示"ERROR 1040 (HY000): Too many connections"
          场景6, 在业务占用连接池满,以管理员可以连接2次,
          场景7  如果管理员先登陆 ,业务方无法连接; 如果业务方先登陆,管理员可以登陆一次,无法登陆第二次
          共可以连接4次。
    四 总结
        1 如果不用extra_port参数,MySQL max_connection个连接全部被占用,DBA仍可以root或者说是具有super权限连接到DB对DB进行管理,但是只能连接一次。业务账号只能登陆 max_connection 次。
        2 如果使用extra_port参数,MySQL max_connection个连接全部被占用,DBA可以以管理员权限创建 extra_max_connections+1个连接。
        3 max_connections的特性
          MySQL无论如何都会保留一个用于管理员(SUPER)登陆的连接,用于管理员连接数据库进行维护操作,即使当前连接数已经达到了max_connections。因此MySQL的实际最大可连接数为max_connections+1;这个参数实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;

时间: 2025-01-30 12:17:29

【MySQL】MySQL 5.6 参数之 extra_port的相关文章

mysql下的wait_timeout参数

mysql中有一个配置参数wait_timeout. 一.参数意思 参数的意思:指的是mysql在关闭一个非交互的连接之前所要等待的秒数. (1)如果设置大小,那么连接关闭的很快,从而使一些持久的连接不起作用 (2)如果设置太大,容易造成连接打开时间过长,在show processlist时,能看到太多的sleep状态的连接,从而造成too many connections错误 (3)一般希望wait_timeout尽可能地低   二.参数设置 set global wait_timeout=1

MySQL配置文件my.ini参数注释说明

mysqld程序–目录和文件 basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的目录. datadir = path 从给定目录读取数据库文件. pid-file = filename 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进程. socket = filename 为MySQL客户程序与服务器之间的本地

MySQL主从复制结构中常用参数

MySQL主从复制结构中常用参数 这篇文章主要简单说一下MySQL主从复制结构中常用到的一些参数.参数是一个程序的翅膀,正是因为有了很多不同的配置参数,程序才会这么强大.一般来说,参数越多越复杂的程序,功能也越强大,因为要处理的组合关系越多,同时掌握起来也越难.即使是一个你天天用的程序,比如 ls 你也很难掌握他的全部参数,所以没事的时候多翻翻man page,你会发现,我靠!这个命令居然还有这个参数,真是NB大了.好了,进入正题: server-id ID值唯一的标识了复制群集中的主从服务器,

mysql启动的时参数文件中的[mysql]下的参数没有生效

问题描述 mysql启动的时参数文件中的[mysql]下的参数没有生效 my.cnf下的参数如下 [mysqld] 此处省略..... [mysql] #no-auto-rehash prompt='u@h:pd mysql>' #max_allowed_packet = 1024M ##影响mysql导人的速度 #default_character_set = gbk 启动方式 mysqld --defaults-file=/etc/my.cnf & 启动后prompt没有生效 [root

MySQL配置文件my.cnf参数优化和中文详解_Mysql

Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳效果. 复制代码 代码如下: [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedir = /usr/local/mysqldatadi

过程函数-navicat for mysql 创建 带有IN参数 的过程时 保存报错

问题描述 navicat for mysql 创建 带有IN参数 的过程时 保存报错 如题. 解决方案 自己找到问题了,下面的参数要写上长度,例如:IN shebeihao varchar(20) 解决方案二:

.net调用mysql存储过程中输出参数的问题,求救~~

问题描述 环境.net2.0+mysql5.0.37+Connector/Net5.2问题:在ASP.NET中调用mysql存储过程(输出参数名于存储过程输出参数名不同时),提示输出参数不存在:Parameter'@param1'notfoundinthecollection.当ASP.NET中修改输出参数名于存储过程中输出参数名相同的时候,提示一个新的参数未定义:Parameter'@1118079786param1'mustbedefined.而这个参数变量是自动生成的,在存储过程中我并没有

Navicat for MySQL如何创建带参数的存储过程

问题描述 Navicat for MySQL如何创建带参数的存储过程?要通过界面创建,输入参数和输出参数应该怎样书写? 问题补充:飞雪无情 写道 解决方案 回答的不能上传截图..你能看到图就更好明白了.运行图形化是直接点上面面的:"运行",然后输入参数,多个参数逗号分割!解决方案二:呵呵.我就是看到了.嗯,输入参数的格式是IN param1 INTEGER(11), IN param2 INTEGER(11)这样的..调用的时候使用 call 存储过程(参数1,参数2);解决方案三:右

mysql配置模板(my-*.cnf)参数详细说明_Mysql

mysql安装成功后有几个默认的配置模板,列表如下:my-huge.cnf : 用于高端产品服务器,包括1到2GB RAM,主要运行mysqlmy-innodb-heavy-4G.ini : 用于只有innodb的安装,最多有4GB RAM,支持大的查询和低流量my-large.cnf : 用于中等规模的产品服务器,包括大约512M RAMmy-medium.cnf : 用于低端产品服务器,包括很少内存(少于128M)my-small.cnf : 用于最低设备的服务器,只有一点内存(少于512M

MySQL配置文件my.cnf参数优化和中文详解

Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳效果. [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedir = /usr/local/mysqldatadir = /data/m