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 数据库容器需保留快速重启方案

一句话总结:

复制代码
数据库很多时候不是"挂了",而是"被高峰期备份拖慢了"。
相关推荐
DFT计算杂谈2 分钟前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
张忠琳7 分钟前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia
HPFBoy10 分钟前
log4net 数据库存日志正确配置
数据库
HiDev_31 分钟前
【非标自动化】2、认识元器件(确定目标)
运维·自动化
liuxiaowei337 分钟前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba
破碎的南瓜1 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql
Zhang~Ling1 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind1 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森1 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
Elastic 中国社区官方博客2 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana