mysql监听的端口变成0
Posted 渔夫数据库笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql监听的端口变成0相关的知识,希望对你有一定的参考价值。
1.版本
1)操作系统
cat /etc/issue
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
Kernel \\r on an \\m
cat /proc/version
Linux version 2.6.32-504.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed
2)mysql数据库版本
mysql --version
mysql Ver 14.14 Distrib 5.6.27, for Linux (x86_64) using EditLine wrapper
2.问题描述
今天测试跟我反映,他们有一套测试库,别人登录不上,而且他发现该套库所在的主机上3306端口并未被监控。
3.问题排查
一开始我怀疑是不是配置的不是默认端口
1)查看mysqld进程
ps -ef|grep mysqld
root 21304 9809 0 14:32 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my3306.cnf
mysql 21784 21304 0 14:32 pts/1 00:00:02 /usr/sbin/mysqld --defaults-file=/etc/my3306.cnf --basedir=/usr --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/data/mysql/mysql3306/log/error3306.log --open-files-limit=10240 --pid-file=/data/mysql/mysql3306/data/3306.pid --socket=/tmp/3306.sock --port=3306
root 22888 9997 0 14:58 pts/2 00:00:00 grep mysqld
##我们可以看到mysqld进程是存在的,而且配置文件中写的也是3306端口
2)查看配置文件
[mysqld]
#socket-datafile
socket =/tmp/3306.sock
port = 3306
basedir=/usr
##我们看到配置文件中也确实写的是3306端口
3)检查3306端口是否被监听
# netstat -lanp|grep 3306
unix 2 [ ACC ] STREAM LISTENING 2788738 21784/mysqld /tmp/3306.sock
# netstat -naop | grep 3306
unix 2 [ ACC ] STREAM LISTENING 2788738 21784/mysqld /tmp/3306.sock
正常情况下监听3306端口应该输出如下:
netstat -lanp|grep 3306
tcp 0 0 127.0.0.1:28226 127.0.0.1:3306 TIME_WAIT -
tcp 0 0 :::3306 :::* LISTEN 24736/mysqld
unix 2 [ ACC ] STREAM LISTENING 2796207 24736/mysqld /tmp/3306.sock
netstat -naop | grep 3306
tcp 0 0 :::3306 :::* LISTEN 24736/mysqld off (0.00/0/0)
unix 2 [ ACC ] STREAM LISTENING 2796207 24736/mysqld /tmp/3306.sock
4)登录数据库
mysql -uroot -p -h127.0.0.1 -P3306
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
##可以看到 我在本地通过127.0.0.1回环地址登录数据库时候报错
通过socket文件登录成功mysql -uroot -p -S /tmp/3306.sock
5)查看 port参数
mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 0 |
+---------------+-------+
1 row in set (0.00 sec)
##注意果然 端口居然变成了0
6)查看err错误日志
<span style="color:#333333;">Version: '5.6.27-log' socket: '/tmp/mysql3306.sock' </span><span style="color:#ff0000;">port: 0 </span><span style="color:#333333;"> Source distribution</span>
##这是mysql启动最后的输出日志,正常情况下port处应该指定的是3306(因为我cnf文件中指定的就是3306)
4.解决方案
因为在本地通过socket方案数据库是能够正常登陆的,但是通过网络来登录数据库就报错,这时我们会想到一个参数skip-networking
1)查看skip-networking参数
mysql> show variables like 'skip_networking';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| skip_networking | ON |
+-----------------+-------+
##果然设置了
skip-networking参数,这个就是导致mysql监听的端口变成0,并且通过网络无法登录数据库的主要原因了
2)查看cnf文件中是否有skip-networking参数
skip-networking
innodb_log_file_size=64M
innodb_log_files_in_group=3
##我们看到cnf文件中确实配置了
skip-networking参数
3)注释掉skip-networking参数后重启实例,问题解决
以上是关于mysql监听的端口变成0的主要内容,如果未能解决你的问题,请参考以下文章