注意:全篇基于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}] |
| ------------------- 😐 ------------------------------: |
| Type | Boolean |
| Default Value | OFF |
该选项影响服务器启动顺序:
-
--skip-grant-tables导致服务器不读取mysql系统模式中的grant表,从而在不使用权限系统的情况下启动。这使得任何可以访问服务器的人都可以无限制地访问所有数据库。
因为使用--skip-grant-tables启动服务器会禁用身份验证检查,所以在这种情况下,服务器也会通过启用skip_networking来禁用远程连接。
为了使服务器以--skip-grant-tables启动,在运行时加载grant表,执行一个权限刷新
mysql>flush privileges;
操作,可以通过以下方式完成:- 在连接到服务器后发出一个
mysql>flush privileges;
语句。 - 从命令行执行mysqladmin flush-privileges或mysqladmin reload命令。
在启动后执行的其他操作也可能隐式地导致特权刷新,从而导致服务器使用grant表启动。例如,如果服务器在启动顺序期间执行升级,则刷新特权。
- 在连接到服务器后发出一个
skip_networking系统变量简介:
| Command-Line Format | --skip-networking[={OFF|ON}] |
| --------------------: |----------------------------: |
| System Variable | skip_networking |
| Scope | Global |
| Dynamic | No |
| SET_VAR Hint Applies | No |
| Type | Boolean |
| Default Value | OFF |
这个变量控制服务器是否允许TCP/IP连接。默认情况下,它是被禁用的(允许tcp/ip连接)。
如果启用,服务器只允许本地(非tcp /IP)连接,所有与mysqld的交互必须使用命名管道(named pipes)或共享内存(shared memory)(在Windows上)或Unix套接字文件(socket file)(在Unix上)。对于只允许使用本地客户机的系统,强烈建议使用此选项。
因为使用--skip-grant-tables启动服务器会禁用身份验证检查,所以在这种情况下,服务器也会通过启用skip_networking来禁用远程连接。
问题解决方案:
方案一:由于此时是安装mysql,免密登陆后,也就是需要修改root账号密码,那么在端口为0的情况下,既然可以成功登陆mysql,那么进行修改root账户密码后,关闭mysql服务器,把配置文件中的--skip-grant-tables注掉重新启动即可。
方案二:关闭服务器,删除数据目录,重新初始化数据目录,但一定要使用--initialize选项生成root账号随机密码。然后启动mysql服务器
注意:既然官方文档说使用--skip-grant-tables启动服务器会禁用身份验证检查,所以在这种情况下,服务器也会通过启用skip_networking来禁用远程连接。那么是否可以在配置文件中配置skip_networking=OFF,解决端口为“0”问题?
通过测试,在配置文件以及通过命令行使用skip_networking=OFF并没有解决端口为“0”问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报