自建数据库高可用实战:MySQL 主从复制、读写分离与备份恢复完整流程
说明:本文为数据库运维的技术学习笔记,文中配置与方法来自公开官方文档及本人多台实例的实操记录,提及的硬件 / 机房参数来自厂商公开资料与本人实测,请以官方最新信息为准。本文讨论的所有操作均针对自有或已获授权的服务器与数据库;请勿将相关技术用于未授权访问、数据窃取或任何违法违规活动。请在合法合规的前提下使用,并遵守数据安全相关法律法规。
前言
做后端这几年,我见过最贵的几种“省事”,都出在数据库上。
第一种:单机裸奔。数据库就一台,没有备份、没有从库,跑得好好的,直到某天磁盘写满,或者一条 DELETE FROM 忘了带 WHERE。我处理过一个客户的案例,半夜误删了一张订单表,没有从库,最近一次备份是两周前——两周的订单数据全丢了,最后靠人工对账恢复了三天。
第二种:备份等于没有。有备份,但从没验证过能恢复。真到要恢复的时候,发现 mysqldump 文件是半截的,或者备份的是从库但从库早就断了同步。
第三种:读写全压主库。站一有点流量,主库 CPU 直接打满,明明可以加从库分担读,却不知道从哪下手。
后面这几种问题的解法,其实都是同一套东西:主从复制 + 读写分离 + 有验证的备份。这套东西在云上跑,成本没有想象中高——一台主库、一台从库,再配一套自动化备份,就能把“数据丢失”这个最大风险压到很低。这篇文章把整套流程拆开讲:先说清高可用到底要解决什么,再讲主从复制的完整部署、读写分离、备份与恢复演练,然后是主从故障排查,最后是几台实测样本对比和一份避坑清单。所有配置和命令都能直接复制运行。
一、先搞清:数据库高可用到底在防什么
很多人一上来就搭主从,但没想清楚“我到底在防哪种事故”。搞清楚这个,才知道该投多少成本。
| 风险场景 | 后果 | 应对手段 |
|---|---|---|
| 磁盘故障/机器宕机 | 服务直接中断 | 从库可切主,快速恢复 |
| 误删/误更新数据 | 数据丢失 | 有备份 + binlog 可做时间点恢复 |
| 读请求压垮主库 | 整体变慢或雪崩 | 从库分担读,读写分离 |
| 勒索软件/入侵删库 | 数据全没 | 异地离线备份 |
| 单点故障无冗余 | 中断时长不可控 | 主从 + 监控告警 |
关键认知:高可用不是“上一个组件就完事”,而是根据你的数据价值和可接受的中断时长,配套不同强度的方案:
- 个人项目/小站:单机 + 每日自动备份 + 异地存一份,成本最低,能防住“误删”和“磁盘坏”两类事故;
- 有真实业务收入的站点:主从复制(防单点)+ 每日备份 + binlog 时间点恢复(防误删),这是性价比最高的档位;
- 核心业务/合规要求:主从 + 定期恢复演练 + 异地多副本 + 监控告警,缺一不可。
本文重点讲第二档——主从 + 备份 + 恢复演练,这是 90% 的自建团队真正需要的。
下面这张图把「风险 → 应对手段」的对应关系画出来,一眼就能看出每类事故该用哪套方案兜底:
二、部署前必须搞明白的两个概念
2.1 binlog:MySQL 的“操作录像”
MySQL 的 binlog(二进制日志)记录了所有对数据的写操作。它是三件事的基础:
- 主从复制:从库就是“把主库的 binlog 拿过来重放一遍”;
- 时间点恢复(PITR):有了全量备份 + binlog,可以恢复到“误删之前的某一秒”;
- 数据审计:出了事能查到谁在什么时候改了什么。
开 binlog 是搭主从和做精细恢复的前提,这一点必须先明确。
2.2 主从复制的三种模式
| 模式 | 原理 | 一致性 | 性能 |
|---|---|---|---|
| 异步复制(默认) | 主库写完就返回,不等从库 | 可能丢少量数据 | 最好 |
| 半同步复制 | 至少等一个从库确认收到 | 较好 | 略降 |
| 组复制(MGR) | Paxos 一致性协议 | 最好 | 配置复杂 |
绝大多数自建场景用异步复制就够——它的短板是"主库崩了可能丢最后几秒数据",但配合 binlog 和备份,这个风险是可接受的。半同步适合对一致性要求更高的业务,MGR 配置复杂、对网络要求高,小团队一般不需要。
三、MySQL 主从复制完整部署
以 MySQL 8.0 为例,主库 master、从库 slave。假设两台机器已经装好 MySQL,版本一致。
3.1 主库配置
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld]
# 每台实例的 server-id 必须全局唯一
server-id = 1
# 开启 binlog(主从和恢复的基础)
log_bin = /var/log/mysql/mysql-bin
binlog_format = ROW # ROW 格式最安全,主从一致性最好
binlog_expire_logs_seconds = 604800 # binlog 保留7天
# 其他基础优化(2核4G机器参考值)
innodb_buffer_pool_size = 2G
innodb_flush_log_at_trx_commit = 1
max_connections = 500
重启并验证:
systemctl restart mysql
# 确认 binlog 已开启
mysql -e "SHOW VARIABLES LIKE 'log_bin';"
mysql -e "SHOW MASTER STATUS\G"
SHOW MASTER STATUS 能输出 File 和 Position,就说明 binlog 正常。
3.2 在主库创建复制专用账号
不要用 root 做复制账号,按最小权限原则单独建一个:
CREATE USER 'repl'@'从库IP' IDENTIFIED BY '换成强密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库IP';
FLUSH PRIVILEGES;
3.3 导出主库数据并记录位点
为了数据一致性,先锁表(低峰期操作)或保证主库无写入:
# 在主库执行,导出全量数据(--master-data 会自动记录 binlog 位点)
mysqldump -u root -p \
--all-databases \
--single-transaction \
--master-data=2 \
--routines --triggers --events \
> /root/master_dump.sql
关键参数解释:
--single-transaction:InnoDB 下实现一致性快照,不用全局锁表;--master-data=2:在 dump 文件里以注释形式记录 binlog 位点,从库配置时要用;--routines --triggers --events:连存储过程、触发器、事件一起导出,漏了会导致从库行为不一致。
导出后立刻在主库锁写或确认无写入,并把 dump 传到从库:
scp /root/master_dump.sql root@从库IP:/root/
3.4 从库配置与导入
从库的 mysqld.cnf:
[mysqld]
server-id = 2 # 必须和主库不同
relay_log = /var/log/mysql/relay-bin
read_only = 1 # 从库只读,防止误写造成主从不一致
log_bin = /var/log/mysql/mysql-bin # 从库也开 binlog,便于后续级联或切换
导入数据并启动复制:
systemctl restart mysql
# 导入主库全量数据
mysql -u root -p < /root/master_dump.sql
从 dump 文件中找出 binlog 位点:
grep "CHANGE MASTER" /root/master_dump.sql
# 输出类似:
# -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=157;
然后用这个位点配置从库:
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='刚才设置的强密码',
MASTER_LOG_FILE='mysql-bin.000003', -- 换成你grep出来的File
MASTER_LOG_POS=157; -- 换成你grep出来的Position
START SLAVE;
3.5 验证主从同步
SHOW SLAVE STATUS\G
重点看两个字段:
Slave_IO_Running: Yes—— IO 线程正常(在拉主库 binlog)Slave_SQL_Running: Yes—— SQL 线程正常(在重放 binlog)
两个都是 Yes 才算同步正常。再看 Seconds_Behind_Master(延迟秒数),正常情况下应该是 0 或个位数。
做个写入测试验证:
# 主库写入
mysql -e "CREATE DATABASE test_repl; CREATE TABLE test_repl.t(id INT); INSERT INTO test_repl.t VALUES(1);"
# 从库查询(应能看到)
mysql -e "SELECT * FROM test_repl.t;"
整个主从复制的数据流向可以概括成下面这张图:主库把写操作记进 binlog,从库的 IO 线程拉取、SQL 线程重放,应用侧写走主库、读走从库。
四、读写分离:让从库真正分担压力
主从搭好只是第一步,如果应用程序还是全连主库,从库就是白搭。读写分离的核心是:写操作走主库,读操作走从库。
4.1 三种实现方式对比
| 方式 | 实现 | 优点 | 缺点 |
|---|---|---|---|
| 应用层分离(手动) | 代码里配两个数据源,读走从库 | 简单直接 | 要改代码、每个业务单独处理 |
| 中间件(如 ProxySQL) | 加一层代理自动路由 | 应用无感、可做故障切换 | 多一层组件要维护 |
| 框架层(ORM 支持) | 如 LazyConnection、Sharding-JDBC | 改造成本可控 | 依赖框架 |
小团队推荐从"应用层手动分离"起步——搞两个连接池,明确哪些查询走从库,改造成本最低,理解也最清楚。
4.2 一个必须注意的坑:主从延迟
读从库有一个经典陷阱:主从有延迟时,刚写的数据立刻读可能读不到。
场景:用户下单(写主库)→ 立刻跳转到订单详情页(读从库)→ 从库还没同步到 → 显示“订单不存在”。
解决方案:
- 关键读走主库:写后立刻要读的数据(如订单详情),强制走主库;
- 会话粘性:同一用户在一定时间内(如 1 秒)的读都走主库;
- 延迟阈值剔除:监控从库延迟,
Seconds_Behind_Master超过阈值就暂时摘掉该从库。
这一点不做,读写分离反而会制造 bug,务必在设计阶段就考虑。
4.3 ProxySQL 快速上手(进阶)
如果读请求压力大、想自动化路由:
# 安装 ProxySQL(以 apt 为例,或 Docker 部署)
docker run -d --name proxysql \
-v /opt/proxysql/proxysql.cnf:/etc/proxysql.cnf \
-p 6033:6033 -p 6032:6032 \
proxysql/proxysql
配置主库作为写组、从库作为读组后,应用连 ProxySQL 的 6033 端口即可,读写路由和故障切换都由它处理。但要注意:ProxySQL 自己也变成了一个需要监控和维护的组件,别引入复杂度而没人管。
五、备份体系:三种备份方式怎么配
主从防的是“机器坏”,备份防的是“数据错/被删”。两者不能互相替代。
5.1 三种备份方式定位
| 方式 | 特点 | 适用 |
|---|---|---|
| 逻辑备份(mysqldump) | 导出 SQL 文本,可读、跨版本 | 中小库、每日全量 |
| 物理备份(XtraBackup) | 直接拷数据文件,快、适合大库 | 大库、要求快速恢复 |
| binlog 增量 | 记录增量操作 | 配合全量做"时间点恢复(PITR)" |
最实用的组合是:每日全量(mysqldump 或 XtraBackup)+ 持续 binlog,两者配合能恢复到"任意时间点"。
5.2 日志逻辑备份脚本
# 每天凌晨2点全量备份,保留7天
cat > /root/db_backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/root/dbbackup
mkdir -p $BACKUP_DIR
# 全量备份(--single-transaction 保证一致性,不锁表)
mysqldump -u root -p你的密码 \
--all-databases \
--single-transaction \
--master-data=2 \
--routines --triggers --events \
| gzip > $BACKUP_DIR/full_$DATE.sql.gz
# 校验备份文件是否可用(关键!防半截备份)
if gzip -t $BACKUP_DIR/full_$DATE.sql.gz; then
echo "$DATE 备份成功,大小: $(du -h $BACKUP_DIR/full_$DATE.sql.gz | cut -f1)" >> $BACKUP_DIR/backup.log
else
echo "$DATE 备份文件损坏!" >> $BACKUP_DIR/backup.log
fi
# 删除7天前的备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
EOF
chmod +x /root/db_backup.sh
echo "0 2 * * * /root/db_backup.sh" >> /etc/crontab
脚本里那个 gzip -t 校验不能省——备份最常见的失败不是“没跑”,而是“跑了但文件是坏的”,不校验等于备份了个寂寞。
5.3 大库用 XtraBackup(热身 + 快速恢复)
库大了(几十 GB 以上)之后,mysqldump 会慢到影响线上,改用物理备份:
# 安装 Percona XtraBackup
apt install -y percona-xtrabackup-80
# 全量备份
xtrabackup --backup --user=root --password=你的密码 \
--target-dir=/root/xtrabackup/full_$(date +%Y%m%d)
# 准备(应用日志,使其一致)
xtrabackup --prepare --target-dir=/root/xtrabackup/full_日期
# 恢复时停止MySQL,清空数据目录后:
xtrabackup --copy-back --target-dir=/root/xtrabackup/full_日期
chown -R mysql:mysql /var/lib/mysql
systemctl start mysql
XtraBackup 的优点是**"热备"(不锁库)且恢复快**,缺点是恢复流程比 dump 复杂,必须提前演练。
5.4 异地备份(最容易被忽略的一步)
备份和数据库放同一台机器,等于没备份 —— 磁盘一坏、被勒索加密,一起完蛋。
# 备份完成后同步到另一台机器或对象存储(示例)
# rsync -avz /root/dbbackup/ user@备份机:/backup/db/
# 或上传到对象存储
# aws s3 sync /root/dbbackup/ s3://your-bucket/db-backup/ --endpoint-url 你的端点
原则:至少有一份备份在物理隔离的地方(另一台机器 / 对象存储 / 离线硬盘)。
把「全量 + 增量 + 异地」串起来,就是一条完整的备份链路:
六、恢复演练:备份能不能用,只有演练过才知道
没验证过的备份,不算备份。 这一步是很多人跳过的,但恰恰最重要。
6.1 全量恢复演练
# 1. 在测试机上导入备份
gunzip < full_20260101_020000.sql.gz | mysql -u root -p
# 2. 抽查关键表的数据量和最新记录时间
mysql -e "SELECT COUNT(*) FROM yourdb.orders;"
mysql -e "SELECT MAX(created_at) FROM yourdb.orders;"
# 3. 对比生产库,确认数据一致
建议半年做一次完整恢复演练,记录耗时——真出事时你才知道“恢复要 40 分钟还是 4 小时”。
6.2 时间点恢复(PITR):恢复到"误删前一秒"
这是 binlog 最大的价值。假设今天 10:00 有人误删了数据,要恢复到 09:59:
# 1. 先恢复最近一次全量备份(比如今天凌晨2点的)
gunzip < full_20260101_020000.sql.gz | mysql -u root -p
# 2. 用 binlog 重放从备份时间点到误删前的所有操作
mysqlbinlog --stop-datetime="2026-01-01 09:59:00" \
/var/log/mysql/mysql-bin.000005 \
| mysql -u root -p
关键:要保留足够的 binlog(binlog_expire_logs_seconds 别设太短),否则"想恢复却发现 binlog 被清理了"。
6.3 定期校验备份完整性
# 自动检查每天备份文件是否存在且能解压
cat > /root/check_backup.sh << 'EOF'
#!/bin/bash
LATEST=$(ls -t /root/dbbackup/*.sql.gz 2>/dev/null | head -1)
if [ -z "$LATEST" ]; then
echo "警告:没有找到备份文件!"
elif gzip -t "$LATEST" 2>/dev/null; then
echo "OK: $LATEST 可正常解压,大小 $(du -h $LATEST | cut -f1)"
else
echo "警告:$LATEST 损坏!"
fi
EOF
chmod +x /root/check_backup.sh
# 每天上午检查一次,可用于告警
echo "0 9 * * * /root/check_backup.sh" >> /etc/crontab
恢复演练的完整流程如下,核心是「先全量、再 binlog 增量、最后校验」:
七、主从故障排查(最常见的四个问题)
主从复制环境出问题,八成就这几种。三板斧命令先记牢:
SHOW SLAVE STATUS\G
7.1 问题一:Slave_SQL_Running: No(1062 主键冲突)
现象:从库报 Duplicate entry 错误。
原因:多半是“从库被写过数据”(没设 read_only 或有程序直连从库写)。
处理:
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; -- 跳过这条冲突(需判断是否安全)
START SLAVE;
但跳过只是权宜之计——如果数据已经不一致,正确做法是重新做一次主从(重新 dump + 重建)。同时从库务必保持 read_only=1。
7.2 问题二:Seconds_Behind_Master 持续增大(延迟)
原因:
- 主库有大事务(一次性
UPDATE百万行); - 从库硬件比主库弱(单核性能差、磁盘慢);
- 从库上有大查询在跑,阻塞了 SQL 线程。
处理:
# 从库上看是否有长查询阻塞
mysql -e "SHOW PROCESSLIST;"
# 开启并行复制(MySQL 8 默认支持),加速重放
# my.cnf 中:
# slave_parallel_workers = 4
# slave_parallel_type = LOGICAL_CLOCK
根本解法:从库硬件别比主库弱太多,尤其是在单核性能上——SQL 线程重放是单线程的(未开并行时),主库强从库弱,延迟必然累积。
7.3 问题三:Slave_IO_Running: Connecting(连不上主库)
排查顺序:
# 1. 网络是否通
ping 主库IP
# 2. 主库3306是否可达
telnet 主库IP 3306
# 3. 复制账号能否登录
mysql -h 主库IP -u repl -p
# 4. 检查主库用户host权限(repl@从库IP 是否匹配)
# 5. 检查防火墙是否放行
常见原因是主库改过 IP、复制账号权限变更、或防火墙没放行从库 IP。
7.4 问题四:磁盘写满导致主从中断
这是最容易被忽略的:主库 binlog 或从库 relay log 把磁盘写满,服务直接停。
# 查看磁盘
df -h
# 清理过期 binlog(谨慎!确认没有从库或备份依赖它)
mysql -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);"
预防:把 binlog_expire_logs_seconds 设成合理值(如 7 天),并监控磁盘使用率(>85% 告警)。
四个高频故障的排查路径,可以按这张图快速定位:
八、几台实测样本对比(供参考)
下面是我手上 / 测试过的几台机器,用于搭数据库主从与备份体系的适配表现。网络、配置数据来自各平台公开页面与本人实测记录,价格为官方公开定价,可能随活动调整,下单前请以官网为准:
| 样本 | 硬件配置 | 网络 / 线路 | 磁盘 | 价格 | 数据库适配判断 |
|---|---|---|---|---|---|
| 香港 CN2 GIA 入门 VPS | 1 vCPU / 1GB / 70GB NVMe | 电信 AS4809 双向,广东 10-12ms | 70GB NVMe | $8.80/月 | 个人库 / 测试从库,1GB 内存偏紧 |
| 香港 CN2 GIA 中配 VPS | 2 vCPU / 4GB / 70GB NVMe | 10Mbps 独享,晚高峰近 0 丢包 | 70GB NVMe | $26.40/月 | 中小业务主库合适,NVMe 随机 I/O 稳定 |
| 德国大带宽 VPS | 入门 512MB 起 | 1Gbps 端口 | 按套餐 | $4.93/月起 | 大带宽便于异地备份传输,512MB 跑 MySQL 偏紧 |
| 日本 / 新加坡 VPS | 1 vCPU / 1GB | CN2 / BGP 线路 | 70GB NVMe | $11.00/月 | 异地从库 / 备份节点,做跨区域冗余 |
| 香港独立服务器(入门) | Intel Xeon E3-1230 v3 四核 / 32GB DDR3 ECC | 香港 CN2 GIA 方向,40Mbps 独享不限流量,3 个独立 IPv4 | 1TB HDD(可加选 NVMe) | $264/月 | 生产主库的合适形态:32GB 内存可给足 buffer pool,1TB 盘存 binlog 和备份 |
| 香港独立服务器(高配) | 双路 E5-2680 v4 / 128GB / 2TB NVMe | 同上 | 2TB NVMe | 约 $440/月 | 大库生产环境、多实例隔离部署 |
说明一下 LuckVM 的实测记录:
- 香港 CN2 GIA VPS:入门 1 vCPU / 1GB / 70GB NVMe / 10Mbps 双向 $8.80/月;中配 2 核 4G / 70GB NVMe / 10Mbps 独享 $26.40/月。回程电信 AS4809(59.43..),广东电信晚高峰 10ms 级、0 丢包。做数据库场景,它的价值在 NVMe 盘的随机 I/O——数据库对 4K 随机读写极其敏感,实测随机读写表现稳定,明显优于同价位的 SATA / 机械盘机型;线路真实(主从之间同步稳定,出事时能快速登入处理)。
- 香港独立服务器(入门款):Intel Xeon E3-1230 v3 四核、32GB DDR3 ECC、1TB HDD(可加选 NVMe)、40Mbps 独享不限流量、3 个独立 IPv4、CN2 GIA 方向、20Gbps+ DDoS 防护,$264/月。这是自建生产数据库最合适的形态——MySQL 的性能高度依赖内存给 buffer pool,32GB 内存能把缓冲池设到 20GB 以上,命中率大幅提升;1TB 盘存 binlog + 全量备份极其从容;ECC 内存对数据库很重要(能纠正内存位翻转,避免数据静默损坏);3 个独立 IP 便于把主库、从库、备份机放在不同 IP 上做隔离。
客观说短板,不然很容易买错:
- VPS 入门款只有 1GB 内存,跑 MySQL 只够极小规模(buffer pool 分不到几百 MB),认真做数据库建议 2核4G 起步;
- VPS 都是 10Mbps 独享带宽,主从同步(数据量不大时)够用,但初始全量复制大库、或做异地备份传输时,带宽会成为瓶颈(10Mbps 峰值约 1.2MB/s,传 50GB 备份要十几个小时);
- 德国/日本大带宽款入门内存只有 512MB,做备份中转节点可以,跑 MySQL 主从完全不够;
- 独立服务器是月付预付制($264/月起),交付需 1-2 小时(装机、配 IPMI、测网络),短期试水不建议一上来就签;
- 入门独服的 1TB 盘是机械硬盘(可加选 NVMe),数据库对随机 IO 极敏感,强烈建议加选 NVMe——机械盘的随机 IOPS 只有几百,跑数据库会成为明显瓶颈;
- 入门独服内存是 DDR3 ECC,比 DDR4 带宽低,对内存带宽敏感的场景(超大 buffer pool + 高并发)建议选高配的 DDR4 机型;
- 它属于较新的服务商(官方口径 2020 年前后开始运营),长期稳定性和大规模口碑积累还不如老牌厂商,数据库是核心资产,把生产主库迁上去前,建议先用从库小规模验证长期稳定性,再迁主。
作为补充:它支持支付宝、PayPal、信用卡、Google Pay、USDT 等付款方式,覆盖 40+ 全球节点,机房普遍带基础 DDoS 防护(独服 20Gbps+),并提供 SLA 可用性承诺。另外一条实操要点:到期后超过 3 天未续费,多数平台会释放实例和数据——数据库所在机器务必开自动续费,或确保异地备份始终可用。
九、避坑清单
- 单机无备份——磁盘坏或误删就是数据全没,成本最低的加固也该做
- 备份和库同机——被勒索/磁盘坏时一起完蛋,必须异地
- 备份不校验——文件是坏的却不知道,等于没备份
- 从不做恢复演练——真出事才发现备恢复不了或要几小时
- 主从 server-id 相同——复制直接起不来,这是低级但高频的错误
- 忘了导 routines/triggers——存储过程和触发器没同步,从库行为不一致
- 从库不设 read_only——有程序误写从库,主从数据就分叉了
- 不监控主从延迟——刚写就读从库,用户看到"数据不存在"
- binlog 保留太短——想恢复时发现日志已被清理
- 磁盘不监控——binlog/relay log 写满磁盘,主从双双中断
- 用 root 做复制账号——权限过大,应单建最小权限账号
- 备份脚本不记日志——失败了你不知道,以为一直在正常备份
十、结语
数据库高可用,核心就四步:
开 binlog(基础)→ 搭主从(防单点)→ 配备份(防误删)+ 异地(防彻底丢)→ 定期演练(验证能不能恢复)
对不同规模,我的建议很直接:
- 个人项目 / 小站:单机 + 每日自动备份 + 异地存一份 +
gzip -t校验,先把“误删”和“磁盘坏”防住; - 有真实业务收入:主库 + 从库(读写分离)+ binlog 时间点恢复 + 每日全量备份,这是性价比最高的档位;
- 大库 / 核心业务:XtraBackup 物理备份 + 半同步复制 + 定期恢复演练 + 监控告警,并在硬件上给足内存与 NVMe 盘。
新机器到手,按这个顺序走一遍就不会翻车:开 binlog → 检查磁盘与内存 → 建复制账号 → 导出全量并记位点 → 配从库并验证双 Yes → 设 read_only → 配每日备份脚本并校验 → 同步异地 → 半年做一次恢复演练 → 监控主从延迟与磁盘使用率。
有主从部署、延迟排查或备份恢复的具体问题,欢迎评论区交流,看到都会回。

浙公网安备 33010602011771号