mysql如何修改默认端口_mysql网络配置教程

来源:这里教程网 时间:2026-02-28 20:46:13 作者:

MySQL 修改默认端口必须改
my.cnf
my.ini

MySQL 启动时只读取配置文件中指定的端口,命令行参数(如

--port=3307
)仅对单次临时启动有效,无法持久化。生产环境必须修改配置文件,否则服务重启后端口自动恢复为 3306。

常见错误现象:

netstat -tuln | grep :3307
看不到监听,但
mysql -P3307 -u root -p
却能连上——说明客户端连的是另一个正在运行的实例(比如 Docker 容器或 homebrew 安装的 MySQL),而非你本地修改了配置却没重启的那个。

Linux/macOS 路径通常是
/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
;用
mysqld --help --verbose | grep "Default options"
可确认实际加载路径
Windows 下一般是
C:\ProgramData\MySQL\MySQL Server X.X\my.ini
(注意
ProgramData
是隐藏目录)
[mysqld]
段落下添加或修改
port=3307
,**不要**写在
[client]
或其他节里
改完必须执行
sudo systemctl restart mysql
(或
mysqld restart
),仅 reload 不生效

防火墙和 SELinux 会拦截非标准端口

端口改了但外网/其他机器连不上?大概率是系统层拦住了。MySQL 自身不处理网络访问控制,全靠操作系统。

Linux 上检查:
sudo ufw status
(Ubuntu)或
sudo firewall-cmd --list-ports
(CentOS/RHEL),需显式开放新端口,例如
sudo ufw allow 3307
SELinux(RHEL/CentOS)默认只允许
mysql_port_t
类型绑定到 3306。要支持 3307,得运行:
sudo semanage port -a -t mysql_port_t -p tcp 3307
;若提示 command not found,先装
policycoreutils-python-utils
云服务器(如阿里云、AWS)安全组规则也必须同步放行新端口,这个常被忽略

bind-address
配置决定能否被远程连接

即使端口改了、防火墙开了,远程仍连不上,90% 是

bind-address
设错了。它控制 mysqld 监听哪个 IP,不是“允许谁来连”。

bind-address = 127.0.0.1
:只响应本地连接,改端口也没用(外部根本连不到这个 socket)
bind-address = 0.0.0.0
:监听所有 IPv4 接口(含公网 IP),配合防火墙才可远程访问
bind-address = 192.168.1.100
:只监听该内网 IP,适合多网卡服务器
MySQL 8.0+ 默认值可能是
127.0.0.1
,不是
0.0.0.0
,这点和老版本不同

客户端连接时必须显式指定新端口

MySQL 客户端(包括

mysql
命令、PHP 的
mysqli_connect()
、Python 的
pymysql.connect()
)不会自动读取服务端配置,端口不匹配就直接报错。

命令行:
mysql -h 127.0.0.1 -P3307 -u root -p
(注意是大写
-P
,小写
-p
是密码)
PHP:
mysqli_connect('127.0.0.1', 'root', 'pwd', '', 3307)
;如果用
localhost
会走 socket,无视端口
连接字符串里写
host=localhost
就算加了
port=3307
也无效,因为 Unix socket 优先级高于 TCP
Docker 运行时记得加
-p 3307:3307
,且容器内 mysqld 配置的
port
bind-address
也要匹配
真正麻烦的不是改端口本身,而是改完之后所有依赖它的环节——监控脚本、备份任务、应用配置、代理层(如 ProxySQL、HAProxy)、甚至开发人员本地的 GUI 工具连接配置——都得同步更新。漏掉一个,问题就会在半夜出现。

相关推荐