MySQL默认端口是多少
核心结论:MySQL 数据库的默认网络通信端口是 3306。在绝大多数操作系统与常规安装方式中,MySQL 服务启动后都会默认在 TCP 协议的 3306 端口上监听客户端传入的连接请求。了解并确认该端口对于配置应用程序数据库连接、排查网络通信受阻以及调整服务器安全策略具有关键作用。
一、3306 端口的作用与网络通信模型
计算机上的各种服务通过 IP 地址定位主机,再通过“端口号”区分不同的网络服务。MySQL 属于典型的客户端/服务端(Client/Server)架构,默认占用由互联网数字分配机构(IANA)专门分配的 TCP 3306 端口。
当应用系统(如 Web 网站、后端 API 服务)或管理工具(如 Navicat、DataGrip、MySQL CLI)需要读写数据库时,它们会向 MySQL 所在的 IP 地址发起针对 3306 端口的 TCP 握手。如果连接双方在同一台物理机或容器内,且未显式指定端口,客户端工具通常也会自动尝试通过 3306 端口进行网络通信。
值得注意的是,自 MySQL 8.0 起,官方引入了 X Plugin 插件用于支持 NoSQL 文档存储协议,该组件默认使用的通信端口为 33060。对于大部分通过标准 SQL 执行查询、事务的应用而言,核心通信端口依然是标准的 3306。
二、如何检查当前实例实际运行的端口
虽然默认值为 3306,但在实际多实例部署或经过定制的环境中,MySQL 的运行端口可能被管理员调整。我们可以通过数据库内部命令或操作系统网络命令直接核查。
方法 1:登录 MySQL 执行 SQL 查询
如果已经可以通过本地命令行连接到数据库,直接查询系统变量即可获取当前监听的端口值:
SHOW VARIABLES LIKE 'port';
终端输出示例:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.01 sec)
方法 2:在服务器操作系统上查看监听状态
在 Linux 服务器终端中,使用系统命令检查 mysqld 进程到底在监听哪一个网络端口:
ss -tlnp | grep mysqld
# 或者使用 netstat 命令
netstat -tlpn | grep mysqld
终端输出示例:
LISTEN 0 128 0.0.0.0:3306 0.0.0.0:* users:(("mysqld",pid=1420,fd=21))
输出中出现的 0.0.0.0:3306 即表明 MySQL 进程正在当前主机的所有网络接口上监听 3306 端口。
三、修改 MySQL 默认端口的操作流程
出于避免端口冲突(例如在同一台机器上运行两个 MySQL 实例)或避免恶意全网扫描等维护需求,有时需要将默认的 3306 端口修改为自定义端口(如 3307 或 13306)。整个操作过程可拆解为明确的四个步骤:
步骤 1:找到配置文件
不同操作系统中,配置文件的默认路径有所区别:
- Linux (CentOS / RHEL / Ubuntu / Debian):通常位于
/etc/my.cnf或/etc/mysql/my.cnf。 - Windows:通常位于 MySQL 安装目录或数据目录下的
my.ini文件(如C:\ProgramData\MySQL\MySQL Server 8.0\my.ini)。
步骤 2:在配置文件中指定端口
使用文本编辑器打开配置文件,找到 [mysqld] 区域,添加或修改 port 字段:
[mysqld]
port = 3307
[client]
port = 3307
[client] 区域将端口同步修改为 3307,这样在本地终端直接输入 mysql -u root -p 时,客户端会自动连接 3307 端口,无需每次手动增加 -P 3307 参数。
步骤 3:重启 MySQL 服务
修改配置文件后,必须重新加载进程才能生效:
# Linux 系统
sudo systemctl restart mysqld
# 或
sudo systemctl restart mysql
# Windows 系统 (PowerShell 管理员模式)
net stop MySQL
net start MySQL
步骤 4:确认端口已更新
服务重启后,指定新的大写 -P 参数进行登录验证:
mysql -h 127.0.0.1 -P 3307 -u root -p
四、排查无法连接到 3306 端口的常见因素
当应用提示 Can't connect to MySQL server on 'x.x.x.x:3306' (111) 或连接超时错误时,问题通常并不出在端口号本身,而是受网络环境或配置限制所致。常见原因可分为以下三类:
1. 监听地址绑定限制(bind-address)
部分 Linux 发行版安装 MySQL 后,默认配置为 bind-address = 127.0.0.1。这表示 3306 端口只接受来自本机内部的请求。如果客户端位于其他物理机或开发机上,需要将该项修改为 bind-address = 0.0.0.0 才会对外监听所有网卡接口。
2. 操作系统防火墙与云平台安全组
在 Linux 主机上,系统防火墙可能拦截了 3306 端口:
# Firewalld 放行 3306
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
# UFW (Ubuntu) 放行 3306
sudo ufw allow 3306/tcp
如果使用的是云主机(如阿里云、腾讯云、AWS),还需要在云控制台的安全组规则中,确认已经为实例的入方向添加了允许目标端口为 3306 的 TCP 协议访问规则。
五、常用场景与总结速查
在不同技术场景下与 MySQL 通信时,端口参数的书写方式略有不同:
| 使用场景 | 连接形式 / 配置项示例 | 说明 |
|---|---|---|
| 命令行 CLI | mysql -h 192.168.1.10 -P 3306 -u root -p |
大写 -P 表示端口号,小写 -p 表示输入密码 |
| JDBC (Java) | jdbc:mysql://192.168.1.10:3306/mydb |
主机名与端口之间使用英文冒号分隔 |
| PHP (PDO) | mysql:host=192.168.1.10;port=3306;dbname=mydb |
在 DSN 字符串中以 port= 明确指定 |
| Python (PyMySQL) | pymysql.connect(host='...', port=3306, ...) |
连接函数中的整数参数 |
总结来说,MySQL 的标准默认端口是 3306。在日常开发与部署时,默认配置无需改动即可满足要求;当处于生产环境或多实例部署架构时,根据需要调整配置文件中的 port 字段,并同步配置防火墙与监听地址,就能确保数据库通信的安全与稳定。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









