MySQL默认端口3306被占用时,应先用netstat或lsof查PID及进程名,再终止占用进程或修改my.cnf中port为未占端口(如3307),重启服务,并检查防火墙与云安全组是否放行。

MySQL 默认端口是 3306,如果启动失败并提示“端口被占用”,说明该端口正被其他进程使用。解决思路很明确:要么停掉占着端口的程序,要么让 MySQL 换个端口运行。
查清楚哪个进程占用了 3306 端口
先确认是不是真被占了,以及被谁占了。不同系统命令略有差异:
-
Windows:打开命令提示符(管理员权限),执行:
netstat -ano | findstr :3306
找到 PID 后,再用 tasklist | findstr "PID号" 查进程名。 -
Linux/macOS:终端执行:
sudo lsof -i :3306 或 sudo netstat -tulnp | grep :3306
停止占用端口的进程(推荐先尝试)
如果发现是其他 MySQL 实例、Docker 容器、测试服务或误启的程序在用 3306,直接关掉它最简单:
- Windows:在任务管理器中结束对应进程,或命令行执行 taskkill /PID 进程号 /F
- Linux/macOS:执行 kill -9 进程号(谨慎操作,确保不是关键服务)
- Docker 用户注意:可能有旧容器映射了 3306,用 docker ps 查看,再 docker stop 容器名
修改 MySQL 配置换端口(稳妥长期方案)
如果无法停掉占用进程(比如公司环境不允许杀服务),或者你想同时运行多个 MySQL 实例,就改配置文件指定新端口:
- 找到 MySQL 配置文件:
Windows 通常是 my.ini,Linux/macOS 一般是 /etc/my.cnf 或 /etc/mysql/my.cnf - 编辑文件,在 [mysqld] 段下添加或修改:
port = 3307(或其他未被占用的端口,如 3308、4306) - 保存后重启 MySQL 服务:
Windows:服务管理器重启 MySQL;Linux:执行 sudo systemctl restart mysql 或 sudo service mysqld restart
检查防火墙和云服务器安全组(容易忽略)
有时端口看似空闲,但连接不上,可能是防火墙拦截或云平台安全组没放行新端口:










