必须用系统命令验证端口监听状态,show variables仅显示配置值;改端口需在[mysqld]段修改port=3307,重启服务并检查防火墙、selinux及云安全组。

确认当前端口监听状态,别只信 SHOW VARIABLES
执行 SHOW VARIABLES LIKE 'port'; 只显示配置值,不代表 MySQL 真正在监听这个端口。实际绑定情况可能被占用、被防火墙拦截,或配置根本没生效。
必须用系统命令验证:
- Linux/macOS:
sudo ss -tuln | grep :3306或sudo netstat -tuln | grep :3306 - 若返回空,说明没监听;若返回
LISTEN且 PID 是mysqld,才确认真在用该端口 - 改端口前先查目标端口是否空闲:
ss -tuln | grep :3307(假设你想换 3307),无输出才安全
改对配置文件位置和段落,[mysqld] 才管用
MySQL 启动时只读取 [mysqld] 段下的 port,其他段无效。常见错误是把 port = 3307 写进 [client] 或 [mysql],那只会改客户端默认连接行为,服务端照旧监听 3306。
配置文件路径因安装方式而异,优先检查这些位置:
-
/etc/my.cnf(全局主配置) -
/etc/mysql/my.cnf(Debian/Ubuntu) -
/etc/mysql/mysql.conf.d/mysqld.cnf(较新 Debian/Ubuntu 默认) -
/usr/local/etc/my.cnf(macOS Homebrew)
打开后,在 [mysqld] 段下添加或修改这一行:
port = 3307
⚠️ 切勿写成 bind-address = 127.0.0.1:3307 —— bind-address 不接受端口号,只接受 IP 地址或 *。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
重启服务后仍连不上?检查防火墙、SELinux 和云安全组
MySQL 改端口后监听成功 ≠ 外部能连上。三个常见拦截点:
- 系统防火墙:如
firewalld,需显式放行:sudo firewall-cmd --add-port=3307/tcp --permanent && sudo firewall-cmd --reload - SELinux(CentOS/RHEL):默认只允许 MySQL 绑定 3306,要加端口策略:
sudo semanage port -a -t mysqld_port_t -p tcp 3307(需先装policycoreutils-python-utils) - 云服务器(阿里云/腾讯云等):安全组规则必须手动添加入方向 TCP 3307,仅开放本地防火墙没用
本地测试连接可用:mysql -u root -p -P 3307 -h 127.0.0.1(注意 -P 大写,小写 -p 是密码)
改完不重启 = 白改,且不能用 SQL 动态改
MySQL 不支持运行时修改监听端口。以下操作全部无效:
-
SET GLOBAL port = 3307;→ 报错Variable 'port' is a read only variable - 只改配置不重启服务 → 进程继续监听旧端口,新配置完全不加载
- 用
--port=3307命令行参数启动 → 可行但不可靠,systemd 服务不会记住它,下次 reboot 就回退
必须重启服务才能生效:
- systemd 系统:
sudo systemctl restart mysql或sudo systemctl restart mysqld(看服务名) - 重启后立刻验证:
sudo ss -tuln | grep :3307+mysql -e "SHOW VARIABLES LIKE 'port';"
最容易被忽略的是:改端口后,所有依赖 MySQL 的应用(如 PHP、Python 脚本、Docker compose)都得同步更新连接字符串里的端口号,否则静默失败。










