≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > MySQL

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

人气:208 时间:2021-07-09

这篇文章主要为大家详细介绍了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版本中,对连接管理这一块,是先后做了两个比较大的改变:一个是允许额外连接,另一个是专用的管理端口。

 

额外连接

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

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

代码如下:


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

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

(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)

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

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

代码如下:


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

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

(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>

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

(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)

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

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

代码如下:


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

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

通过上面测试可知,在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:是否创建一个单独的线程来监听管理连接

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

(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

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

(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)

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

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

代码如下:


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

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

(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> 

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

(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)

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

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

 

总结

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

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

本文来自:http://www.q1010.com/177/19327-0.html

注:关于MySQL 8.0新特性 — 管理端口的使用简介的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:

您可能感兴趣的文章

上一篇:MySQL的加密解密的几种的简单示例
下一篇:MySQL中查看数据库安装路径的简单示例
热门文章
  • mysql 修改character_set_server为utf-8的简单示例
  • 解决MySQL丢失文件localhost.localdomain.pid、mysql.sock的示例
  • MySQL 数据类型binary和varbinary的简单示例
  • MySQL:reading initial communication packet问题解决方法
  • MySql 表类型MYISAM、InnoDB区别
  • bash: mysql: command not found 的解决方法
  • MYSQL默认用户名ROOT修改方法
  • MySQL 常用命令菜鸟教程
  • MySQL 使用命令行新建用户并授予权限
  • MySql 数据库物理文件存放位置查看示例
  • 最新文章
    • MySQL查看死锁与解除死锁的简单示例
    • MySQL 慢查询的功能实例
    • MySQL查看死锁与去除死锁的简单示例
    • MySQL找出未提交事务的SQL的简单示例
    • MySQL锁阻塞的的简单示例
    • MySQL中的binary类型使用操作的示例
    • SQL优化教程之in与range查询的简单示例
    • MySQL 的 21 个规范、优化最佳实践!
    • MySQL 字符类型大小写敏感的简单示例
    • 解决mybatis-plus分页传入参数后sql where条件没有limit分页信息的问题

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。