MySQL8.0连接协议及3306、33060、33062端口的作用解析
作者:刘大大__
一、MySQL连接层
连接层为每个连接维护一个线程。该线程处理查询执行。 在连接可以开始发送 SQL 查询之前,连接由验证用户名、密码和客户端主机。
连接层通过多种连接协议接受来自应用程序的连接:
- TCP/IP
- UNIX 套接字
- 共享内存
- 命名管道
如下图所示:
二、连接协议
协议在客户端库和驱动程序中实现。
连接协议的速度因本地设置而异。
除了旧版 MySQL 经典协议之外,MySQL X 协议还引入了MySQL 5.7.12 并在 MySQL 8.0 中默认启用。
MySQL 使用 TCP 将消息从客户端通过网络传输到服务器,可以使用以 mysqlx 为前缀的变量和选项来配置 MySQL X 协议。
mysqlx 变量的一些示例:
- • mysqlx
- • mysqlx_bind_address
- • mysqlx_max_connections
- • mysqlx_port
- • mysqlx_socket
三、本地和远程连接协议:TCP/IP
TCP/IP(传输控制协议/互联网协议):
1、是用于连接 Internet 上的主机的连接协议套件
2、使用 IP 地址或 DNS 主机名来识别主机
3、使用 TCP 端口号来标识每个主机上的特定服务
MySQL 默认 TCP 端口号:
1、3306 用于 MySQL Classic 协议(服务器端口选项)
2、33060 用于 MySQL X 协议(服务器 mysqlx_port 选项)
3、33062 用于使用 MySQL Classic 协议的管理连接(服务器 admin_port 选项)
修改my.cnf
admin_address='localhost'
修改前后对比:
[root@hadoop1 ~]# mysql -e "show variables like 'admin%'"; +------------------------+-----------------+ | Variable_name | Value | +------------------------+-----------------+ | admin_address | | | admin_port | 33062 | | admin_ssl_ca | | | admin_ssl_capath | | | admin_ssl_cert | | | admin_ssl_cipher | | | admin_ssl_crl | | | admin_ssl_crlpath | | | admin_ssl_key | | | admin_tls_ciphersuites | | | admin_tls_version | TLSv1.2,TLSv1.3 | +------------------------+-----------------+ [root@hadoop1 ~]# systemctl restart mysqld.service [root@hadoop1 ~]# mysql -e "show variables like 'admin%'"; +------------------------+-----------------+ | Variable_name | Value | +------------------------+-----------------+ | admin_address | localhost | | admin_port | 33062 | | admin_ssl_ca | | | admin_ssl_capath | | | admin_ssl_cert | | | admin_ssl_cipher | | | admin_ssl_crl | | | admin_ssl_crlpath | | | admin_ssl_key | | | admin_tls_ciphersuites | | | admin_tls_version | TLSv1.2,TLSv1.3 | +------------------------+-----------------+ [root@hadoop1 ~]#
成功登录:
[root@hadoop1 ~]# mysql -P 33062 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 8.0.28 MySQL Community Server - GPL Copyright (c) 2000, 2022, Oracle and/or its affiliates. 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>
网络监听情况:
[root@hadoop1 ~]# netstat -anltp | grep 33062 tcp 0 0 127.0.0.1:33062 0.0.0.0:* LISTEN 1104641/mysqld [root@hadoop1 ~]#
设置最大连接数方便测试:
mysql> set global max_connections = 1; Query OK, 0 rows affected (0.00 sec)
重新连接:
[root@hadoop1 ~]# mysql ERROR 1040 (HY000): Too many connections [root@hadoop1 ~]# mysql -P 33062 --protocol tcp Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 21 Server version: 8.0.28 MySQL Community Server - GPL Copyright (c) 2000, 2022, Oracle and/or its affiliates. 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.14 开始,MySQL 服务器允许专门为管理连接配置 TCP/IP 端口。这为用于普通连接的网络接口上允许的单个管理连接提供了一种替代方法,即使已经建立了 max_connections 连接。只有在启动时设置了 admin_address 系统变量以指示管理接口的 IP 地址时,该接口才可用。如果未指定 admin_address 值,则服务器不维护管理界面。
只有SERVICE_CONNECTION_ADMIN 权限的用户才允许连接。没有限制管理连接的数量。 MySQL 服务器使用 DNS(域名系统)来解析使用 TCP/IP 协议连接的客户端主机的名称,并将它们存储在主机缓存中。对于在名称解析过程中出现性能问题的大型网络,请使用 --skip-name-resolve 选项禁用 DNS 或增加 --host-cache-size 选项的值。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。