mysql监听的端口变成0

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进程

 

  1.  
    ps -ef|grep mysqld
  2.  
    root 21304 9809 0 14:32 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my3306.cnf
  3.  
    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
  4.  
    root 22888 9997 0 14:58 pts/2 00:00:00 grep mysqld
##我们可以看到mysqld进程是存在的,而且配置文件中写的也是3306端口

2)查看配置文件

 

  1.  
    [mysqld]
  2.  
    #socket-datafile
  3.  
    socket =/tmp/3306.sock
  4.  
    port = 3306
  5.  
    basedir=/usr
##我们看到配置文件中也确实写的是3306端口

3)检查3306端口是否被监听

 

  1.  
    # netstat -lanp|grep 3306
  2.  
    unix 2 [ ACC ] STREAM LISTENING 2788738 21784/mysqld /tmp/3306.sock
  3.  
     
  4.  
    # netstat -naop | grep 3306
  5.  
    unix 2 [ ACC ] STREAM LISTENING 2788738 21784/mysqld /tmp/3306.sock
正常情况下监听3306端口应该输出如下:

 

  1.  
    netstat -lanp|grep 3306
  2.  
    tcp 0 0 127.0.0.1:28226 127.0.0.1:3306 TIME_WAIT -
  3.  
    tcp 0 0 :::3306 :::* LISTEN 24736/mysqld
  4.  
    unix 2 [ ACC ] STREAM LISTENING 2796207 24736/mysqld /tmp/3306.sock
  5.  
     
  6.  
    netstat -naop | grep 3306
  7.  
    tcp 0 0 :::3306 :::* LISTEN 24736/mysqld off (0.00/0/0)
  8.  
    unix 2 [ ACC ] STREAM LISTENING 2796207 24736/mysqld /tmp/3306.sock

4)登录数据库

 

  1.  
    mysql -uroot -p -h127.0.0.1 -P3306
  2.  
    Enter password:
  3.  
    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参数

 

  1.  
    mysql> show variables like 'port';
  2.  
    +---------------+-------+
  3.  
    | Variable_name | Value |
  4.  
    +---------------+-------+
  5.  
    | port | 0 |
  6.  
    +---------------+-------+
  7.  
    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参数

 

  1.  
    mysql> show variables like 'skip_networking';
  2.  
    +-----------------+-------+
  3.  
    | Variable_name | Value |
  4.  
    +-----------------+-------+
  5.  
    | skip_networking | ON |
  6.  
    +-----------------+-------+
##果然设置了skip-networking参数,这个就是导致mysql监听的端口变成0,并且通过网络无法登录数据库的主要原因了

2)查看cnf文件中是否有skip-networking参数

 

  1.  
    skip-networking
  2.  
     
  3.  
    innodb_log_file_size=64M
  4.  
    innodb_log_files_in_group=3
##我们看到cnf文件中确实配置了skip-networking参数

3)注释掉skip-networking参数后重启实例,问题解决

posted @ 2020-08-24 22:56  小周同学、  阅读(77)  评论(0)    收藏  举报