应先查3306端口占用进程再决策,Linux/macOS用lsof -i :3306或netstat,Windows用netstat -ano;确认是否可终止(如Docker容器用docker stop更安全,IDE代理直接关闭),否则修改MySQL配置port为3307并开放防火墙。
直接执行命令查端口归属,比盲目重启服务更可靠。Linux/macOS 下用 lsof 或 netstat,Windows 下用 netstat -ano 配合任务管理器。
lsof -i :3306或
netstat -tuln | grep :3306
netstat -ano | findstr :3306,拿到 PID 后再用
tasklist | findstr 查进程名不是所有 3306 占用都该强行终止。先判断这个进程是否关键,避免误操作导致其他服务中断。
docker ps 看容器名,用 docker stop 更安全kill -9 即可mysqld 但你不确定是不是刚装的新实例,先运行 mysqladmin -u root -p ping 测试能否连上——能连说明它就是你要用的那个,别杀如果占用进程不能/不该停(比如生产环境共存多个 MySQL 版本),就让新装的 MySQL 改用其他端口,而非硬抢 3306。
my.cnf(Linux/macOS)或 my.ini(Windows),找到 [mysqld] 段落port = 3307
sudo systemctl restart mysql(systemd)或 sudo service mysql restart(SysV)mysql -u root -p -P 3307;应用配置里也要同步改 port 字段,否则连不上sudo ufw allow 3307(若启用 ufw)
Windows 安装多个 MySQL 时,常因服务名重复或残留服务项导致端口“假占用”——netstat 显示 3306 被占,但 tasklist 找不到对应进程。
sc queryex type= service state= all | findstr "MySQL"
STOPPED 但 WIN32_EXIT_CODE 不是 0,说明服务注册残留,用 sc delete 清理HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 下以 MySQL 开头的键mysqld --install MySQL80 --defaults-file="C:\my80.cnf",并在
my80.cnf 里写明 port = 3308