MySQL 与 3306 端口
3306 是 MySQL、MariaDB 与 Percona Server 的默认 TCP 端口;同一台机器上的客户端用 Unix socket 连接时不经过网络端口,因此只改端口并不能挡住本机访问。默认实例监听 3306,多实例部署常见 3307、3308 顺延。新版本默认已把 bind-address 收敛到本机,但云主机安全组误放开的例子依然很多,被扫号与拖库的案例长期高居前列。
基本信息
| 服务 | MySQL / MariaDB / Percona Server |
|---|---|
| 协议 | TCP(本机可用 Unix socket,不走端口) |
| 相邻端口 | 33060 为 X Protocol;主从复制同样走 3306 |
| 配置文件 | /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf |
| 权限要求 | 管理需 root 级账号,应用账号应按库与来源网段最小授权 |
典型使用场景
- 业务应用连接数据库:连接池配置指向内网地址与 3306
- 主从或组复制:从库向主库建立复制连接,通常网段内直连
- 备份与导出:mysqldump 或物理备份工具按端口连接实例
- 多实例同机部署:用 3306/3307/3308 区分不同业务库
- 开发与测试环境:只对本机或跳板机开放,避免开发机直连生产
监听与连接自检
监听与连接自检
ss -lntp | grep 3306 # 确认监听地址是 127.0.0.1 还是 0.0.0.0
mysql -h 127.0.0.1 -P 3306 -u app -p -e 'SELECT VERSION();' # 本机冒烟连接
mysql -h 10.0.1.20 -P 3306 -u app -p -e 'SELECT 1;' # 从应用侧验证网络可达
nc -vz 10.0.1.20 3306 # 网络层先行确认,排除防火墙拦截
mysqladmin -h 10.0.1.20 -u app -p status # 顺带看一眼运行时长与连接数加固项与判定
| 加固项 | 检查方式 | 风险点 |
|---|---|---|
| 监听地址 | 看 bind-address 与 ss 输出 | 0.0.0.0 表示全网卡可连 |
| root 远程登录 | 查 mysql.user 中 host 含 % 的 root | 等于把最高权限账户放到网络上 |
| 应用账号来源 | SHOW GRANTS 看 host 网段 | 写成 % 时任何来源都能尝试 |
| 空口令账户 | 查 authentication_string 为空的账号 | 无需口令即可登录 |
| 备份文件权限 | 看备份目录属主与权限 | 备份泄露等于整库泄露 |
账户与权限复核(SQL)
账户与权限复核(SQL)
SELECT user, host, plugin FROM mysql.user ORDER BY user; -- 列出所有账户与来源
SHOW GRANTS FOR 'app'@'10.0.1.%'; -- 确认授权范围
SELECT user, host FROM mysql.user WHERE authentication_string = ''; -- 排查空口令账户
SELECT user, host FROM mysql.user WHERE user = 'root' AND host NOT IN ('localhost','127.0.0.1','::1'); -- 远程 root输出逐列读法
| 输出项 | 含义 | 正常/异常 |
|---|---|---|
| Id | 连接线程编号 | 反复出现大编号说明连接频繁重建 |
| User | 当前连接使用的账户 | 出现 root 或陌生账户要追溯来源 |
| Host | 客户端来源地址与端口 | 非应用网段来源应告警 |
| db | 当前使用的库 | NULL 表示尚未选库 |
| Command | Sleep 表示空闲、Query 表示执行中 | 大量长时间 Sleep 说明连接池未回收 |
| Time | 该状态已持续秒数 | 大数值配合 Query 往往是慢查询 |
连接数与慢查询体检
连接数与慢查询体检
SHOW STATUS LIKE 'Threads_connected'; -- 当前连接数
SHOW VARIABLES LIKE 'max_connections'; -- 上限,两者比值接近 80% 需扩容或排查泄漏
SHOW PROCESSLIST; -- 关注长时间 Sleep 与异常来源
SHOW ENGINE INNODB STATUS; -- 查看最近死锁与事务情况防火墙与安全组只放行应用服务器来源;数据库账户按库授权,远程 root 与空口令账户必须清理,这几步比改端口有效得多。
复制账号单独处理:只授予 REPLICATION SLAVE 权限并限制来源地址,不要复用业务账号;复制凭据一旦泄露,攻击者可以直接拉走整库数据。
备份演练不能省:逻辑备份适合单库与跨版本迁移,物理备份适合大库快速恢复;备份文件权限要与数据库本身同级,并且定期做一次真实恢复,避免需要时才发现不可用。
连接数打满往往先由慢查询引起:打开慢查询日志后用 mysqldumpslow 或 pt-query-digest 汇总,优先处理扫描行数大的语句;在没有清掉慢语句之前扩容,只是把问题往后推。
本机连接不走端口:同机脚本用 Unix socket 连库时,即使把 3306 关掉也照样能访问,因此只收敛网络端口挡不住本机进程,本机登录权限与账户管控要一起做。