网站打不开,页面报 502,日志里一串无法连接数据库。登服务器第一件事,先确认 MySQL 是挂了,还是只是连不上。这两种情况的处理方式完全不同。

先看服务状态

Debian 和 Ubuntu 上一般是 systemctl status mysql,CentOS 和 RHEL 上服务名是 mysqld,装了 MariaDB 的则是 mariadb。输出里看 Active 那一行,active (running) 表示进程在跑,failed 表示起不来,下面几行会带最近的日志片段,错误原因通常就写在那里。

服务名记不准,用 systemctl list-units 加 grep 过滤 mysql 来查,别靠猜。名字写错会提示找不到单元,看着像服务没装,白紧张一场。

再看端口和进程

ps -ef 加 grep mysql 能看到进程和启动参数,顺带能看出配置文件路径。ss -lntp 加 grep 3306 看端口有没有监听,注意监听地址:只写了 127.0.0.1 的,外部一律连不上,这跟服务是否正常没关系。

端口在监听、进程也在,还是连不上,就往网络和权限上查:防火墙规则、云服务器的安全组、数据库用户允许的来源主机。错误信息是拒绝连接还是超时,指向的原因也不一样。

连接数和慢查询

mysqladmin status -u root -p 一行就能看到运行时长、连接数、查询量。想细看就登进库执行 show processlist,Threads_connected 接近 max_connections 说明连接被占满了,应用端没关连接池是常见原因。

日志在哪

错误日志一般在 /var/log/mysql/error.log 或 /var/log/mysqld.log,具体以配置文件里的 log-error 为准。服务起不来时,这里的第一条错误才是根因,后面那一堆都是连锁反应。磁盘写满导致无法启动的情况不少,顺手 df -h 看一眼根分区。

排查顺序就两句话:先分清是服务没跑还是连不上,再按进程、端口、权限、日志一层层看。别一上来就重启,重启会盖掉现场,本来两分钟能定位的问题要重演一遍。