在linux服务器上,3306端口通常是mysql数据库默认使用的端口。当我们需要启动mysql服务或者排查数据库连接问题时,首先要确认该端口是否已经被其他进程占用。下面介绍几种常用的查看方式。

使用netstat命令查看
netstat是一个传统的网络状态查看工具,大多数linux发行版都自带。使用以下命令可以查看3306端口的占用情况:
# 查看3306端口是否被监听以及对应进程 netstat -tlnp | grep 3306 # 如果没有输出,说明端口未被占用 # 如果有输出,会显示类似如下信息: # tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1234/mysqld
其中-t表示tcp协议,-l表示监听状态,-n表示以数字形式显示端口,-p表示显示进程信息。
使用ss命令查看
ss是netstat的现代替代工具,执行速度更快。查看方式如下:
# 查看3306端口占用 ss -tlnp | grep 3306
如果返回结果为空,代表3306端口当前没有被任何进程监听。
使用lsof命令查看
lsof用于列出当前系统打开的文件,包括网络端口。可以用它直接查看哪个进程占用了3306:
# 查看占用3306端口的进程 lsof -i:3306 # 输出示例: # COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME # mysqld 1234 mysql 10u IPv4 12345 0t0 TCP *:mysql (LISTEN)
根据占用情况处理
如果查到3306端口被占用,且占用进程不是你需要的服务,可以通过进程ID结束它:
# 假设查到的进程ID是1234 kill 1234 # 若无法正常结束可使用强制终止 kill -9 1234
如果是你自己安装的mysql已经占用,但新服务也想用3306,就需要修改新服务的配置文件,更换成其他端口,例如3307,避免冲突。
| 命令 | 适用场景 | 是否需要安装 |
|---|---|---|
| netstat | 传统排查,兼容性好 | 一般系统自带 |
| ss | 快速查看,推荐新系统 | iproute2包自带 |
| lsof | 精确定位打开端口的进程 | 部分最小化系统需安装 |
通过上述任意一种方法,你都可以清楚地知道linux上3306端口是否被占用,以及该如何应对端口冲突问题。