确认 MySQL 当前监听的端口
安装完 MySQL 后,
my.cnf(Linux/macOS)或
my.ini(Windows)里未必已显式配置端口,MySQL 默认使用
3306。直接查运行时实际绑定端口更可靠: Linux/macOS:执行
sudo netstat -tuln | grep :3306或
sudo ss -tuln | grep :3306Windows:用
netstat -ano | findstr :3306,再通过 PID 查进程是否为
mysqld.exe进入 MySQL 执行
SHOW VARIABLES LIKE 'port';,但注意这仅反映配置值,不保证端口未被占用或未被防火墙拦截
修改配置文件中的 port 参数
必须编辑 MySQL 的主配置文件,不是环境变量或启动脚本。常见路径:
Linux:通常为/etc/my.cnf或
/etc/mysql/my.cnf,部分发行版用
/etc/mysql/mysql.conf.d/mysqld.cnfmacOS(Homebrew):一般在
/opt/homebrew/etc/my.cnf或
/usr/local/etc/my.cnfWindows:通常是
C:\ProgramData\MySQL\MySQL Server X.X\my.ini(注意
ProgramData是隐藏目录)
在
[mysqld]段落下添加或修改这一行:
[mysqld] port = 3307
⚠️ 不要写在
[client]或其他段落下——那只会改客户端默认连接端口,服务端仍监听 3306。
检查端口是否被占用并重启服务
换端口前务必验证目标端口空闲,否则 MySQL 启动会静默失败(日志里报
Can't start server: Bind on TCP/IP port): Linux/macOS:
lsof -i :3307或
nc -zv localhost 3307(返回 connection refused 表示空闲) Windows:
netstat -ano | findstr :3307
重启服务后验证生效:
sudo systemctl restart mysql # 或 sudo service mysqld restart # Windows: # net stop MySQLXX & net start MySQLXX
然后再次执行
SHOW VARIABLES LIKE 'port';和系统级端口监听检查,二者必须一致。
客户端连接和防火墙适配
改端口后,所有连接方式都需显式指定新端口,否则仍尝试连 3306:
命令行:mysql -u root -p -P 3307(注意大写
-P) 连接字符串(如 Python 的
pymysql):
port=3307参数不能漏 图形工具(DBeaver/Navicat):主机名后加
:3307,或单独填“端口”字段 防火墙(尤其是云服务器):需放行新端口,例如 Ubuntu 的
sudo ufw allow 3307
如果应用是通过 socket 文件连接(
localhost且未指定
-h),则不受端口影响;但一旦用
127.0.0.1或远程 IP,就走 TCP,必须匹配新端口。
