• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL 8.0新特性 — 管理端口的使用简介

    前言

    下面这个报错,相信大多数童鞋都遇见过;那么碰到这个问题,我们应该怎么办呢?在MySQL 5.7及之前版本,出现“too many connection”报错,超级用户root也无法登录上去,除了重启实例,没有其他更好的解决办法;不过在MySQL 8.0版本中,是对连接管理做了一些优化,下面我们就来看一下。

    ERROR 1040 (HY000): Too many connections

    连接管理

    在MySQL 8.0版本中,对连接管理这一块,是先后做了两个比较大的改变:一个是允许额外连接,另一个是专用的管理端口。

    额外连接

    在MySQL 8.0版本中,在当前连接数达到最大连接数时,服务端允许1个额外连接,可以让具有CONNECTION_ADMIN权限的用户连接进来,下面简单测试一下。

    (1)为了方便测试,先调整最大连接数

    mysql> set global max_connections=3;
    Query OK, 0 rows affected (0.00 sec)

    (2)多开几个会话,以达到最大连接数

    mysql> show processlist;
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    | Id | User  | Host  | db | Command | Time | State   | Info  |
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    | 15 | event_scheduler | localhost | NULL | Daemon | 154190 | Waiting on empty queue | NULL  |
    | 54 | root  | localhost | NULL | Query | 0 | starting  | show processlist |
    | 55 | test  | 127.0.0.1:59120 | NULL | Sleep | 19 |   | NULL  |
    | 56 | test  | 127.0.0.1:59136 | NULL | Sleep | 9 |   | NULL  |
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    4 rows in set (0.00 sec)
    
    mysql> show global status like 'threads_connected';
    +-------------------+-------+
    | Variable_name | Value |
    +-------------------+-------+
    | Threads_connected | 3 |
    +-------------------+-------+
    4 rows in set (0.01 sec)

    (3)普通用户test尝试连接,报错too many connections

    $ mysql -utest -p -h127.0.0.1 -P10080
    Enter password: 
    ERROR 1040 (08004): Too many connections

    (4)超级用户root尝试连接成功

    $ mysql -uroot -p
    Enter password: 
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 60
    Server version: 8.0.20 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>

    (5)再次查看当前连接数,为max_connections+1

    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    | Id | User  | Host  | db | Command | Time | State   | Info  |
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    | 15 | event_scheduler | localhost | NULL | Daemon | 155064 | Waiting on empty queue | NULL  |
    | 54 | root  | localhost | NULL | Query | 0 | starting  | show processlist |
    | 55 | test  | 127.0.0.1:59120 | NULL | Sleep | 893 |   | NULL  |
    | 56 | test  | 127.0.0.1:59136 | NULL | Sleep | 883 |   | NULL  |
    | 60 | root  | localhost | NULL | Sleep | 141 |   | NULL  |
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    5 rows in set (0.00 sec)
    
    mysql> show global status like 'threads_connected';
    +-------------------+-------+
    | Variable_name | Value |
    +-------------------+-------+
    | Threads_connected | 4 |
    +-------------------+-------+
    4 rows in set (0.00 sec)

    (6)超级用户root再次尝试连接,也报错too many connections

    $ mysql -uroot -p
    Enter password: 
    ERROR 1040 (HY000): Too many connections

    通过上面测试可知,在MySQL 8.0中,允许的连接数为max_connections+1,其中这1个额外连接,只允许具有CONNECTION_ADMIN权限的用户使用。通过这1个额外连接,DBA可以使用超级用户root连接,进行kill会话等管理操作,以避免直接重启实例,降低成本,提高效率。

    管理端口

    额外连接,在一定程度上,提供了出现too many connection问题时的临时解决手段,但额外数量只有1个,难免会有一些意外,出现类似"连接被抢用"、“终端异常掉线”等情况。因此,在MySQL 8.0.14版本中,又推出了一个非常重要的新特性——管理端口;它允许具有SERVICE_CONNECTION_ADMIN权限的用户,通过特定的IP和PORT连接上来,且没有连接数限制。

    (1)先介绍下相关参数

    admin_address:监听IP地址
    admin_port:监听端口
    create_admin_listener_thread:是否创建一个单独的线程来监听管理连接

    (2)通过配置上述参数,即可启用管理端口

    mysql> show global variables like 'admin%';
    +---------------+-----------+
    | Variable_name | Value |
    +---------------+-----------+
    | admin_address | 127.0.0.1 |
    | admin_port | 33062 |
    +---------------+-----------+
    2 rows in set (0.00 sec)
    
    # netstat -lntp | grep 33062
    tcp 0 0 127.0.0.1:33062  0.0.0.0:*  LISTEN 20042/mysqld

    (3)接下来进行测试

    mysql> show processlist;
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    | Id | User  | Host  | db | Command | Time | State   | Info  |
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    | 15 | event_scheduler | localhost | NULL | Daemon | 168750 | Waiting on empty queue | NULL  |
    | 54 | root  | localhost | NULL | Query | 0 | starting  | show processlist |
    | 55 | test  | 127.0.0.1:59120 | NULL | Sleep | 14579 |   | NULL  |
    | 56 | test  | 127.0.0.1:59136 | NULL | Sleep | 14569 |   | NULL  |
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    4 rows in set (0.00 sec)
    
    mysql> show global status like 'threads_connected';
    +-------------------+-------+
    | Variable_name | Value |
    +-------------------+-------+
    | Threads_connected | 3 |
    +-------------------+-------+
    1 row in set (0.00 sec)

    (4)普通用户test尝试连接,报错too many connections

    $ mysql -utest -p -h127.0.0.1 -P10080
    Enter password: 
    ERROR 1040 (08004): Too many connections

    (5)超级用户root尝试通过管理端口连接成功

    $ mysql -uroot -p -h127.0.0.1 -P33062
    Enter password: 
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 62
    Server version: 8.0.20 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 

    (6)继续多开几个会话,使用超级用户root,通过管理端口连接成功,不受最大连接数max_connections限制

    mysql> show processlist;
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    | Id | User  | Host  | db | Command | Time | State   | Info  |
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    | 15 | event_scheduler | localhost | NULL | Daemon | 169035 | Waiting on empty queue | NULL  |
    | 54 | root  | localhost | NULL | Query | 0 | starting  | show processlist |
    | 55 | test  | 127.0.0.1:59120 | NULL | Sleep | 14864 |   | NULL  |
    | 56 | test  | 127.0.0.1:59136 | NULL | Sleep | 14854 |   | NULL  |
    | 62 | root  | 127.0.0.1:47660 | NULL | Sleep | 151 |   | NULL  |
    | 63 | root  | 127.0.0.1:47760 | NULL | Sleep | 52 |   | NULL  |
    | 64 | root  | 127.0.0.1:47768 | NULL | Sleep | 43 |   | NULL  |
    | 65 | root  | 127.0.0.1:47780 | NULL | Sleep | 35 |   | NULL  |
    | 66 | root  | 127.0.0.1:47790 | NULL | Sleep | 24 |   | NULL  |
    | 67 | root  | 127.0.0.1:47800 | NULL | Sleep | 16 |   | NULL  |
    | 68 | root  | 127.0.0.1:47808 | NULL | Sleep | 8 |   | NULL  |
    +----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
    11 rows in set (0.00 sec)
    
    mysql> show global status like 'threads_connected';
    +-------------------+-------+
    | Variable_name | Value |
    +-------------------+-------+
    | Threads_connected | 10 |
    +-------------------+-------+
    1 row in set (0.00 sec)

    可以说,有了管理端口这个新功能,DBA再也不用担心too many connections的问题。

    总结

    在MySQL 8.0版本中,为了应对too many connections的场景,先后推出了额外连接和管理端口两个新功能,可以让DBA方便、快速地解决问题;不过,这始终是一个临时应急手段,最根本的原因还是要排查应用端的配置(并发限流、SQL性能、连接池配置等等),以彻底规避此类问题。

    以上就是MySQL 8.0新特性 — 管理端口的使用简介的详细内容,更多关于MySQL 8.0新特性 — 管理端口的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • mysql 8.0.24版本安装配置方法图文教程
    • mysql 8.0.24 安装配置方法图文教程
    • MySQL8.0.24版本Release Note的一些改进点
    • Java连接MySQL8.0 JDBC的详细步骤(IDEA版本)
    • 详解分析MySQL8.0的内存消耗
    • MySql8.023安装过程图文详解(首次安装)
    • MySQL 8.0新特性 — 检查性约束的使用简介
    • mysql8.0.23 msi安装超详细教程
    • MySQL8.0.23免安装版配置详细教程
    • win10下安装mysql8.0.23 及 “服务没有响应控制功能”问题解决办法
    • MySQL 8.0 之不可见列的基本操作
    上一篇:mysql利用mysqlbinlog命令恢复误删除数据的实现
    下一篇:开启MySQL的binlog日志的方法步骤
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL 8.0新特性 — 管理端口的使用简介 MySQL,8.0,新特性,新,特性,