首页 > 技术文章 > mysqld使用--skip-grant-tables选项启动后,端口为“0”解决办法

zhangxl1016 2021-04-14 14:21 原文

注意:全篇基于mysql8.0 + windows10,其余版本可能略有不同,请参阅各个版本官方说明文档。

问题描述

在mysql安装过程中通过配置文件(my.ini或my.cnf)或命令行 使用--skip-grant-table选项免密登陆中,发现mysqld启动后端口为“0”,下面为启动mysqld输出:

E:\software\mysql-8.0.20-3307> bin\mysqld --console
2021-04-13T09:41:51.890231Z 0 [System] [MY-010116] [Server] E:\software\mysql-8.0.20-3307\bin\mysqld.exe (mysqld 8.0.20) starting as process 13572
2021-04-13T09:41:51.914498Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-04-13T09:41:52.778184Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-04-13T09:41:53.117237Z 0 [Warning] [MY-011311] [Server] Plugin mysqlx reported: 'All I/O interfaces are disabled, X Protocol won't be accessible'
2021-04-13T09:41:53.352061Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2021-04-13T09:41:53.395742Z 0 [System] [MY-010931] [Server] E:\software\mysql-8.0.20-3307\bin\mysqld.exe: ready for connections. Version: '8.0.20'  socket: ''  port: 0  MySQL Community Server - GPL.

问题排查

1、查看mysqld进程是否存在
windows命令窗口输入tasklist|findstr "mysqld",linux系统输入ps -ef|grep mysqld,输出如下:

PS E:\software\mysql-8.0.20-3307> tasklist|findstr "mysqld"
mysqld.exe                   13572 Console                    1    137,916 K

可以看到mysqld其实启动成功了。

2、接着查看配置文件(确保此配置文件生效)。

可以看到端口配置确实是3307。

3、查看使用的端口是否被监听
windows命令窗口输入netstat -aon|findstr "3307",linux系统输入netstat -lanp|grep 3306netstat -naop | grep 3306输出如下:

E:\software\mysql-8.0.20-3307> netstat -ano|findstr "3307"
E:\software\mysql-8.0.20-3307>

可以看到3307端口确实没有被监听。

4、登陆mysql确定port值
此时是免密登陆可以命令行输入mysql -u root -p,连续回车即可,linux可以通过socket文件登录成功mysql -u root -p -S /tmp/XXX.sock。

mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 0     |
+---------------+-------+
1 row in set, 1 warning (0.05 sec)

mysql>

果然 端口变成了“0”

7.查看错误日志
mysqld在启动时如果没有指定--console选项,会在数据目录生成一个.err文件。若使用--console选项,直接在控制台查看消息。
可以看到这条警告信息

Plugin mysqlx reported: 'All I/O interfaces are disabled, X Protocol won't be accessible'

意思就是:mysqlx插件报告:'所有I/O接口被禁用,X协议将无法访问'。
此时并无清晰解决办法。

由于是使用--skip-grant-table配置,导致问题,可以去官网查看此选项说明。

首先去官网查看--skip-grant-table选项介绍

| Command-Line Format | --skip-grant-tables[={OFF|ON}] |
| -------------------

推荐阅读