无法在端口 3306 上启动 MySQL

Posted

技术标签:

【中文标题】无法在端口 3306 上启动 MySQL【英文标题】:Unable to start MySQL on port 3306 【发布时间】:2020-03-15 09:02:01 【问题描述】:

我在 Windows 10 机器上安装了 XAMPP(Apache、mysqlphp、phpmyadmin),地址为 D:\xampp,我已经使用了至少 3 个月没有任何问题。

从今天开始,没有更改任何配置或安装任何东西,在尝试启动 MySQL 时,我在 XAMPP 控制台窗口中收到此错误:

20:17:05  [mysql]   Status change detected: running
20:17:08  [mysql]   Status change detected: stopped
20:17:08  [mysql]   Error: MySQL shutdown unexpectedly.
20:17:08  [mysql]   This may be due to a blocked port, missing dependencies, 
20:17:08  [mysql]   improper privileges, a crash, or a shutdown by another method.
20:17:08  [mysql]   Press the Logs button to view error logs and check
20:17:08  [mysql]   the Windows Event Viewer for more clues
20:17:08  [mysql]   If you need more help, copy and post this
20:17:08  [mysql]   entire log window on the forums

这在 mysql_error.log 中:

InnoDB: using atomic writes.
2019-11-19 20:17:05 0 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
2019-11-19 20:17:05 0 [Note] InnoDB: Uses event mutexes
2019-11-19 20:17:05 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2019-11-19 20:17:05 0 [Note] InnoDB: Number of pools: 1
2019-11-19 20:17:05 0 [Note] InnoDB: Using SSE2 crc32 instructions
2019-11-19 20:17:05 0 [Note] InnoDB: Initializing buffer pool, total size = 16M, instances = 1, chunk size = 16M
2019-11-19 20:17:05 0 [Note] InnoDB: Completed initialization of buffer pool
2019-11-19 20:17:06 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
2019-11-19 20:17:06 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2019-11-19 20:17:06 0 [Note] InnoDB: Setting file 'D:\xampp\mysql\data\ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2019-11-19 20:17:06 0 [Note] InnoDB: File 'D:\xampp\mysql\data\ibtmp1' size is now 12 MB.
2019-11-19 20:17:06 0 [Note] InnoDB: Waiting for purge to start
2019-11-19 20:17:06 0 [Note] InnoDB: 10.4.8 started; log sequence number 300333; transaction id 171
2019-11-19 20:17:06 0 [Note] InnoDB: Loading buffer pool(s) from D:\xampp\mysql\data\ib_buffer_pool
2019-11-19 20:17:06 0 [Note] Plugin 'FEEDBACK' is disabled.
2019-11-19 20:17:06 0 [Note] Server socket created on IP: '::'.
2019-11-19 20:17:06 0 [ERROR] Can't start server: Bind on TCP/IP port. Got error: 10013: An attempt was made to access a socket in a way forbidden by its access permissions.


2019-11-19 20:17:06 0 [ERROR] Do you already have another mysqld server running on port: 3306 ?
2019-11-19 20:17:06 0 [ERROR] Aborting

但是,3306 端口似乎没有运行任何东西

没有其他 MySQL 进程或服务在运行 运行 netstat 时不显示端口 3306 在 Windows 防火墙中未被阻止

如果我将端口更改为随机端口(例如 10200),MySQL 将启动并正常工作。端口 3307 和 3308 不起作用,即使它们看起来也没有被使用,就像 3306 一样。

我尝试过但没有解决问题的方法:

(显然)重启 XAMPP 和 PC 清除D:\xampp\mysql\data目录 XAMPP 的干净安装 以管理员身份运行 从 Window 的控制台启动 MySQL 重置防火墙规则 关闭防火墙/防病毒

正如我之前提到的,在一些不同的端口(如 10200)上运行 MySQL 是可行的。所以除了能够再次在 3306 上运行 MySQL 之外,我还想知道到底发生了什么以及它是如何发生的。任何想法表示赞赏!

编辑:有一个 Windows 更新 (KB4522741),但我不认为它有某种关联。

【问题讨论】:

尝试使用netstat -an | findstr 3306 看看是否有其他东西绑定到该端口。 @lainatnavi 已经尝试过并且刚刚再次确认。返回空,所以我想端口应该可用 检查这个 KBA support.microsoft.com/en-ca/help/4093046/… 看看是否是这种情况。同时运行netsh int ipv6 show dynamicport tcp 以查看保留端口的范围。无论如何以管理员身份运行服务应该能够绑定任何端口。 这可能也有帮助:github.com/docker/for-win/issues/1707 看来问题解决了。按照你指给我的方向,我用netsh interface ipv4 show excludedportrange protocol=tcp检查了端口,确实保留了3306。然后我卸载了KB4522741,问题解决了!重新安装它以确保它负责,但现在 3306 保留,一切正常。我不明白这一点,我不会想象 Windows 保留端口,更不用说 3306 等常见端口了......非常感谢@lainatnavi 的帮助。 【参考方案1】:

您可能会遇到此问题,因为在端口 3306 上正在处理其他服务。这也可能是由于您的系统中安装了 MySQL(除了 xampp setup 附带的那个)。

我的解决方案: 只需前往您机器上 MySQL 服务器中的 bin 文件夹,然后在命令提示符下从该目录运行此命令。(例如:C:\Program Files\MySQL\MySQL Server 8.0\bin) mysqladmin -u root -p 关机

此命令将安全地关闭在端口 3306 上运行的现有 MySQL,以便您可以使用 xampp 上的 MySQL 访问同一端口。这用于在没有冲突或无需卸载其他应用程序或无需将 my.ini 文件中的端口更改为 3307 的情况下同时工作。现在重新启动 xampp 控制面板并在端口 3306 上启动服务器。这对我有用。

希望这会有所帮助!

【讨论】:

【参考方案2】:

您需要更新窗口。这对我有用

【讨论】:

请在您的答案中添加一些解释,以便其他人可以从中学习

以上是关于无法在端口 3306 上启动 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

如何修复:MySQL 无法启动:错误“另一个 mysqld 服务器在端口:3306 上运行?” - 检查端口,它是免费的

phpStudy启动后为啥MYSQL无法启动

解决阿里云服务器3306端口无法访问的问题(windows server 2008r2)

一次解决MySQL无法启动的全过程

无法连接docker端口映射问题的解决

即使mysqld在端口3306上运行,也无法连接到'localhost:3306'上的MySQL服务器