ss -lntp 里 mysqld 那一行写的是 0.0.0.0:3306,从本地机器 mysql -h 公网IP 能直接进,root 还允许任意主机登录。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

[mysqld]
bind-address = 127.0.0.1

# 收窄已有账号
RENAME USER 'root'@'%' TO 'root'@'10.0.0.%';

my.cnf 里 bind-address 被改成 0.0.0.0,或者干脆没写,云主机安全组又恰好放行了 3306。数据库只剩密码这一道门,扫到端口就能慢慢试。这一点先确认清楚,后面就不用反复试。

「MySQL 端口暴露」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

具体做法是,先把 bind-address 改回 127.0.0.1,重启 mysqld 生效;再把账号主机段收窄,root 只留 localhost 和指定内网段;安全组删掉 3306 的 0.0.0.0/0 规则,需要远程运维就走跳板机。

改完照着核一遍,ss 里只剩 127.0.0.1:3306,从外网 telnet 该端口连接超时。

作者 9823189