注意:全篇基于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 3306
或netstat -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}] |
| -------------------