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 ([email protected]) (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参数后重启实例,问题解决





你可能感兴趣的:(skip-networking)