MySQL主库高峰期备份引发504故障:从库手动切换接管 + 主从恢复同步 + Docker版DB2重启实战_2026-05-17

生产环境一次典型故障处理记录。

现象很经典:

复制代码
系统接口大量 504
业务无法正常写入

排查后发现:

  • MySQL 主库正在执行 xtrabackup 热备

  • 备份时间处于业务高峰期

  • 数据库 IO 压力升高

  • 接口请求超时

  • 应用出现 504

同时还涉及:

  • MySQL 从库临时切换为可写

  • 主库恢复后重新恢复主从同步

  • Docker 容器中的 DB2 数据库重启恢复

这篇文章只记录核心处理流程。


一、问题现象

服务器负载检查:

复制代码
top

发现:

复制代码
mysqld CPU 占用非常高
xtrabackup 正在运行
wa(IO等待)升高

进一步检查:

复制代码
ps -ef | grep xtrabackup

发现备份任务:

复制代码
xtrabackup --backup ...

查看 crontab:

复制代码
crontab -l

发现:

复制代码
40 17 * * * /home/mysql_backup/backup.sh

也就是:

复制代码
每天 17:40 执行 MySQL 物理热备

而此时间段正处于业务高峰期。


二、停止 xtrabackup 备份任务

先停止备份进程:

复制代码
kill xtrabackup_PID

检查是否结束:

复制代码
ps -ef | grep xtrabackup

确认无进程即可。

随后删除未完成备份目录:

复制代码
rm -rf /home/mysql_backup/2026-05-16_1740

三、MySQL 从库临时切换为可写

由于主库异常,需要临时将从库接管业务。

登录从库:

复制代码
mysql -uroot -p

查看只读状态:

复制代码
show variables like 'read_only';
show variables like 'super_read_only';

默认:

复制代码
ON

停止主从复制:

复制代码
stop slave;

关闭只读:

复制代码
set global super_read_only=OFF;
set global read_only=OFF;

确认:

复制代码
show variables like 'read_only';
show variables like 'super_read_only';

结果:

复制代码
OFF

此时:

复制代码
从库正式切换为可写库

业务随后切换连接至从库。


四、从库无法连接问题处理(3306 防火墙)

虽然 MySQL 已监听:

复制代码
ss -lntp | grep 3306

但远程仍报:

复制代码
2002 - Can't connect to server
10060

检查 firewalld:

复制代码
firewall-cmd --list-all

发现:

复制代码
3306 未放通

直接关闭防火墙:

复制代码
systemctl stop firewalld
systemctl disable firewalld

随后从库恢复远程连接。


五、主库恢复正常后,重新切回只读并恢复同步

主库恢复后,需要把从库重新恢复为:

复制代码
只读 + 主从同步

重新开启只读:

复制代码
set global read_only=ON;
set global super_read_only=ON;

重新开启同步:

复制代码
start slave;

检查同步状态:

复制代码
show slave status\G

重点确认:

复制代码
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

说明主从同步恢复正常。


六、Docker 容器中的 DB2 数据库重启

环境中的 DB2 为 Docker 部署。

查看容器:

复制代码
docker ps

发现:

复制代码
db-db2

通过 docker restart 重启 DB2 容器服务

重启 Docker 部署的 DB2 容器(db-db2):

复制代码
docker restart db-db2

注意:本次操作执行的是 docker restart db-db2,属于重启单个 DB2 容器,并不是重启 Docker 服务。如果执行 systemctl restart docker,则是重启 Docker 引擎,可能导致该服务器上的所有容器受到影响。

复制代码
docker restart db-db2
= 重启某一个容器:db-db2

systemctl restart docker
= 重启 Docker 服务/ Docker 引擎

查看状态:

复制代码
docker ps | grep db-db2

查看日志:

复制代码
docker logs --tail=100 db-db2

关键日志:

复制代码
SQL1063N DB2START processing was successful.

说明:

复制代码
DB2 启动成功

七、故障总结

本次问题本质上是:

复制代码
MySQL 热备任务在业务高峰执行
导致数据库 IO 压力升高
接口请求超时
最终触发 504

这类问题在生产环境非常常见。

后续优化建议:

  • MySQL 备份改至凌晨低峰期

  • 备份与压缩分离

  • 避免高峰期执行 xtrabackup

  • 主从切换前必须确认原主库停止写入

  • Docker 数据库容器需保留快速重启方案

一句话总结:

复制代码
数据库很多时候不是"挂了",而是"被高峰期备份拖慢了"。
相关推荐
迪康Defender3 分钟前
终端供应链安全:应用白名单与软件正版化检测落地|终端安全治理实践
运维·服务器·网络·安全·web安全·自动化·运维开发
lzx_0028 分钟前
Linux 进程(二) 深入理解进程
linux
沫璃染墨39 分钟前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
温暖小土39 分钟前
在 CentOS 上安装 Redis Stack
linux·redis·centos
CCIE-Yasuo1 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
这个DBA有点耶1 小时前
内核级AI与多模融合:AI数据库在海外场景的落地要点
数据库·人工智能·架构
涛思数据(TDengine)1 小时前
从工业本体到 AI 原生:TDengine 出席 2026 QCon 分享工业数据基础设施路径
大数据·数据库·人工智能·tdengine·工业
Jesse_EC2 小时前
换乘次数最少的路径 SQL 查询详解与实战经验——从 WITH RECURSIVE 到 pgRouting
数据库·postgresql
工控丫丫2 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
GeW3 小时前
国产化替代进入深水区之后Linux 与数据库为什么必须走向重建
linux