作者:张昊,DBA,主要负责 MySQL 故障处理、DMP 产品支持,擅长 MySQL,喜欢打球~唱歌~
爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
本文约 600 字,预计阅读需要 2 分钟。
1背景
某客户的测试同事本地部署 MySQL 8.0 数据库,配置文件增加部分变量重启数据库之后发现数据库远程连接失败。
2排查
1 查看数据库进程状态
[root@hao-3 ~]# ps -ef|grep mysqld |grep 8888
actiont+ 25825 1 0 02:10 ? 00:00:01 /opt/mysql/base/8.0.28/bin/mysqld --defaults-file=/opt/mysql/etc/8888/my.cnf --daemonize --pid-file=/opt/mysql/data/8888/mysqld.pid --user=actiontech-mysql --socket=/opt/mysql/data/8888/mysqld.sock --port=8888
2 查看服务 TCP 连接情况
使用 netstat
命令查看数据库服务的 TCP 连接情况,输出结果为空。
[root@hao-3 ~]# ps -ef|grep mysqld|grep 8888
actiont+ 25825 1 0 02:10 ? 00:00:05 /opt/mysql/base/8.0.28/bin/mysqld --defaults-file=/opt/mysql/etc/8888/my.cnf --daemonize --pid-file=/opt/mysql/data/8888/mysqld.pid --user=actiontech-mysql --socket=/opt/mysql/data/8888/mysqld.sock --port=8888
[root@hao-3 ~]# netstat -lantup |grep 25825 //查看进程
[root@hao-3 ~]#
[root@hao-3 ~]# netstat -lantup |grep 8888 //查看端口
[root@hao-3 ~]#
3 查看数据库端口
查看数据库端口,结果为 0!
[root@hao-3 ~]# /opt/mysql/base/8.0.28/bin/mysql -uroot -p1 -S /opt/mysql/data/8888/mysqld.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 11
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> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 0 |
+---------------+-------+
1 row in set (0.00 sec)
4 查看配置文件
发现客户配置了 skip_networking
变量。该配置会导致数据库无法通过 TCP/IP 进行连接。
mysql> show variables like '%networking%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| skip_networking | ON |
+-----------------+-------+
1 row in set (0.00 sec)
[root@hao-3 ~]# grep skip /opt/mysql/etc/8888/my.cnf
skip_external_locking = 1
skip_name_resolve = 1
skip_replica_start = 1
skip_networking=on
5 官方文档解释
skip_networking
控制 MySQL 服务是否允许 TCP/IP 连接,默认是关闭。如果开启这个变量,MySQL 服务只允许本地连接,不允许任何 TCP/IP 连接。
需要注意的是当配置了 --skip-grant-tables
变量之后,skip_networking
变量默认也会开启,此时禁用任何远程连接。
官方手册说明
3结论
skip_networking
变量需要根据业务情况来进行配置,对于只允许本地访问的 MySQL 数据库系统来说,强烈建议配置该变量;对于大部分需要远程访问的数据库是不需要进行配置的,保持默认关闭就可以。这个变量不能动态修改,需要修改配置文件,然后重启数据库服务。
本文关键字:#MySQL# #配置# #TCP/IP#
阅读推荐
技术分享 | 基于 MySQL 多通道主主复制的机房容灾方案
故障分析 | MySQL 迁移完不能快速导数据了
技术译文 | 一封写给 MySQL 8.2 贡献者的感谢信
技术译文 | MySQL 8.2 支持读写分离!
技术译文 | MySQL 8.1.0 推出 InnoDB Cluster 只读副本
行业观察 | 2023 年 DBA 有哪些新的挑战?
关于 SQLE
SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。
SQLE 获取
🔗 Github https://github.com/actiontech/sqle📚 文档 https://actiontech.github.io/sqle-docs/💻 官网 https://opensource.actionsky.com/sqle/👥 微信技术交流群:添加管理员微信 ActionOpenSource📊 点击 原文链接 查看社区版和企业版功能对比:https://actiontech.github.io/sqle-docs/docs/support/compare