一、前言

在上一篇【技术底稿 05】中,我们已经完成了 MySQL 主从复制的搭建,实现了主写从读、数据实时同步的基础高可用架构。

但在真实生产环境中,搭完主从只是第一步。如果没有状态巡检、没有监控告警、没有数据备份,一旦主从延迟、主库宕机、数据误删,整个系统就会瞬间失控。

本文基于我个人 DevOps 平台的真实生产环境,分享 MySQL 主从搭建完成后,必须落地的生产级三件套

  1. 主从健康状态巡检:每日必做,确保同步正常
  2. 双节点监控接入 Prometheus:实时监控主从状态与延迟
  3. 主库自动备份 + 异地容灾:数据安全的最后一道防线

所有操作均基于 Docker 环境,命令可直接复制,完全适配个人 / 中小企业生产环境,无任何虚招。


二、环境说明(与技术底稿 05 完全对齐,直接复用)

表格

项目 配置
主库(HP 服务器) Ubuntu 22.04,IP:192.168.18.100,Docker 部署 MySQL 8.0
从库(联想笔记本) Ubuntu 22.04,IP:192.168.18.101,Docker 部署 MySQL 8.0
监控体系 HP 服务器部署 Prometheus + Grafana,Docker Compose 管理
网络架构 主从均为内网,外网通过阿里云 FRP 穿透,MySQL 端口 3306 完全不暴露公网
核心目标 主从状态可视化、数据零丢失、故障可预警

三、第一件事:主从健康状态巡检(每日必做)

主从同步是否正常,是 MySQL 高可用的核心。我们需要两个核心命令,快速判断主从状态。

1. 主库执行:查看主库日志位置

sql

docker exec -it mysql8 mysql -uroot -p'mysql_123!' -e "SHOW MASTER STATUS;"

执行结果示例:

关键说明:

  • File:当前主库正在写入的 binlog 文件
  • Position:当前 binlog 的写入位置,从库会以此为基准进行同步
  • 此命令用于确认主库 binlog 写入正常,是主从同步的源头

2. 从库执行:查看从库同步状态

sql

docker exec -it mysql-slave mysql -uroot -p'mysql_123!' -e "SHOW SLAVE STATUS\G;"

核心关注三个关键字段:

plaintext

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
  • Slave_IO_Running: Yes:从库 IO 线程正常,能正常拉取主库 binlog
  • Slave_SQL_Running: Yes:从库 SQL 线程正常,能正常执行 binlog 中的 SQL
  • Seconds_Behind_Master: 0:主从同步延迟为 0,数据完全一致

异常判断:

  • 任意一个线程为 No,说明主从同步中断,需立即排查
  • Seconds_Behind_Master 数值持续增大,说明主从延迟严重,需优化

实战建议:将这两个命令加入每日巡检脚本,或配置 Prometheus 告警,一旦异常立即通知。


四、第二件事:双节点监控接入 Prometheus(从库无 compose 专用版)

重要说明(真实环境踩坑备注)

我的从库(联想机器)之前因为系统 Python 被升级,导致 docker-compose v1 直接报废,无法使用。因此本篇不使用 docker-compose,全部采用 docker run 命令,稳定、无依赖、不污染环境,真正生产可用。

1. 从库启动 mysqld_exporter(docker run 一条命令)

在从库(192.168.18.101)直接执行,不需要 compose、不需要配置文件

bash

运行

# 先创建MySQL监控配置文件
cat > ~/myapp/.my.cnf <<EOF
[client]
user=root
password=mysql_123!
host=127.0.0.1
port=3306
EOF

# 授权文件权限(解决权限拒绝问题)
chmod 644 ~/myapp/.my.cnf

# 启动 mysqld_exporter (最终稳定版)
docker run -d \
  --name mysqld_exporter \
  --restart always \
  --user root \
  -v ~/myapp/.my.cnf:/root/.my.cnf \
  --net=host \
  prom/mysqld-exporter \
  --config.my-cnf=/root/.my.cnf

2. 检查是否启动成功

bash

运行

docker ps | grep mysqld_exporter

3. Prometheus 加入从库监控(HP 主库操作)

修改 prometheus.yml

yaml

scrape_configs:
  - job_name: 'mysqld_exporter'
    static_configs:
      - targets: ['192.168.18.100:9104']

  - job_name: 'mysql-slave'
    static_configs:
      - targets: ['192.168.18.101:9104']

4. 重启 Prometheus

bash

运行

docker restart prometheus

5. 验证监控

打开 Prometheus targets 页面,能看到 mysql-slave 为 UP 即成功

6. 监控效果验证

登录 Grafana,导入 MySQL 监控面板,即可看到:

  • 主库、从库的连接数、QPS、TPS 实时数据
  • 主从同步状态、延迟时间可视化
  • 一旦主从中断、延迟过高,立即触发告警

实战价值:双节点监控让主从状态完全可视化,彻底告别 “黑盒运维”,故障发生前就能提前预警。


五、第三件事:主库自动备份 + 异地容灾(数据安全底线)

主从架构只能解决高可用,无法解决数据误删、磁盘损坏等问题。备份,是数据安全的最后一道防线

我们在主库实现每日自动备份 + 异地同步到从库,形成生产级数据安全闭环。

1. 备份脚本(最终版,直接复制)

路径:/opt/backup/mysql_backup.sh

bash

运行

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/opt/backup/mysql"

# 远程备份机器(联想从库,SSH 免密已配置)
REMOTE_IP="192.168.18.101"
REMOTE_USER="hanyue"
REMOTE_DIR="/opt/backup/mysql"

MYSQL_USER="root"
MYSQL_PASS="mysql_123!"
MYSQL_CONTAINER="mysql8"
MYSQL_DB="shangzhuhui"

# 1. 执行 MySQL 全量备份
docker exec $MYSQL_CONTAINER mysqldump -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB > $BACKUP_DIR/db_$DATE.sql

# 2. 压缩备份文件,节省空间
gzip $BACKUP_DIR/db_$DATE.sql

# 3. 异地同步到从库,实现容灾
rsync -avz $BACKUP_DIR/db_$DATE.sql.gz $REMOTE_USER@$REMOTE_IP:$REMOTE_DIR/

# 4. 清理本地 7 天前的旧备份
find $BACKUP_DIR -name "db_*.sql.gz" -type f -mtime +7 -delete

2. 从库上创建文件夹

bash

运行

sudo mkdir -p /opt/backup/mysql
sudo chmod 777 /opt/backup/mysql

3. 脚本授权与测试

bash

运行

# 赋予执行权限
sudo chmod +x /opt/backup/mysql_backup.sh
# 授权备份目录
sudo chmod 777 /opt/backup/mysql
# 手动执行测试
/opt/backup/mysql_backup.sh

4. 定时任务配置(每日凌晨 2 点自动执行)

bash

运行

sudo crontab -e
# 添加一行
0 2 * * * /opt/backup/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

5. 效果验证

  • 主库:ls /opt/backup/mysql 可看到 db_日期.sql.gz 备份文件
  • 从库:ls /opt/backup/mysql 可看到同步过来的备份文件
  • 日志:tail -f /var/log/mysql_backup.log 可查看备份执行日志

核心优势

  • 从库无需单独备份,仅同步主库备份,节省资源
  • 异地容灾,即使主库磁盘损坏,也能通过从库备份快速恢复
  • 自动执行,无需人工干预,稳定可靠


六、总结:MySQL 主从生产级闭环

通过本文的三件套操作,我们将 MySQL 主从从 “能跑” 升级为 “生产可用”:

  1. 状态巡检:每日确认主从同步正常,防患于未然
  2. 双节点监控:主从状态可视化,故障提前预警
  3. 自动备份 + 异地容灾:数据安全兜底,零丢失保障

下一篇预告:我们将基于这套主从架构,分享 MySQL 读写分离的实战落地,进一步提升系统性能。


 关注我

持续更新《人生底稿》成长史 &《技术底稿》&《产品底稿》实战干货一起踏实成长,不焦虑、不内卷。

 📚 系列导航:

 【人生底稿 01】|农村少年(1995–2005)

 【技术底稿】01:37岁老码农,用4台机器搭了套个人DevOps平台

 【产品底稿01】37 岁 Java 老码农,用 Java 搭了个 AI 写作助手,把自己 14 年技术文章全喂给了 AI!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐