feat(mysql): 添加MySQL全量备份与还原脚本及文档
新增备份脚本backup-sync.sh和还原脚本restore-sync.sh,用于处理严重复制冲突场景 更新故障分析文档,补充全量备份还原的操作流程和注意事项 添加测试流程模板文件_TEST_FLOW_TEMPLATE.md 更新SKILL.md文档,增加测试流程分析相关内容
This commit is contained in:
@@ -99,3 +99,122 @@ BEGIN; COMMIT;
|
||||
SET GTID_NEXT = 'AUTOMATIC';
|
||||
START REPLICA;
|
||||
```
|
||||
|
||||
## 2. 全量备份还原解决冲突(适用于严重冲突场景)
|
||||
|
||||
当复制冲突过多、数据不一致严重,或手动修复成本过高时,可以使用全量备份还原的方式彻底解决冲突问题。此方法通过从主库(或备份库)全量备份数据,然后在从库上完全还原,实现数据一致性。
|
||||
|
||||
### 2.1 相关脚本
|
||||
|
||||
- **备份脚本**: [`backup-sync.sh`](./backup-sync.sh) - 在主库或备份库上执行全量备份
|
||||
- **还原脚本**: [`restore-sync.sh`](./restore-sync.sh) - 在从库上执行全量还原
|
||||
|
||||
### 2.2 操作流程
|
||||
|
||||
#### 步骤 1: 在备份机上执行备份
|
||||
|
||||
在需要备份的 MySQL 服务器(通常是主库或数据一致的节点)上执行备份脚本:
|
||||
|
||||
```bash
|
||||
# 备份所有数据库(默认)
|
||||
cd /data/backup/mysql
|
||||
./backup-sync.sh
|
||||
|
||||
# 或指定标签备份
|
||||
./backup-sync.sh -t conflict_resolve
|
||||
|
||||
# 或备份指定数据库
|
||||
./backup-sync.sh database1 database2
|
||||
```
|
||||
|
||||
备份脚本会自动:
|
||||
- 设置 MySQL 为只读模式
|
||||
- 停止复制(如果是从库)
|
||||
- 记录当前 GTID 位置
|
||||
- 执行全量备份并压缩为 `.7z` 文件
|
||||
- 恢复 MySQL 为读写模式
|
||||
|
||||
备份完成后,会在 `/data/backup/mysql/` 目录下生成 `YYYYMMDDHHMMSS.7z` 或 `YYYYMMDDHHMMSS_TAG.7z` 格式的备份文件。
|
||||
|
||||
#### 步骤 2: 传输备份文件到还原机
|
||||
|
||||
使用 `scp` 将备份文件推送到需要还原的 DB 机的 `/data/backup/mysql/` 目录:
|
||||
|
||||
```bash
|
||||
# 从备份机执行(将备份文件推送到还原机)
|
||||
scp /data/backup/mysql/YYYYMMDDHHMMSS.7z user@restore-server:/data/backup/mysql/
|
||||
|
||||
# 示例
|
||||
scp /data/backup/mysql/20250127120000.7z root@192.168.1.100:/data/backup/mysql/
|
||||
```
|
||||
|
||||
**注意**: 确保还原机的 `/data/backup/mysql/` 目录存在且有写入权限。
|
||||
|
||||
#### 步骤 3: 在还原机上执行还原
|
||||
|
||||
在需要还原的 MySQL 服务器(从库)上执行还原脚本:
|
||||
|
||||
```bash
|
||||
cd /data/backup/mysql
|
||||
|
||||
# 还原所有数据库
|
||||
./restore-sync.sh YYYYMMDDHHMMSS.7z
|
||||
|
||||
# 或仅还原指定数据库
|
||||
./restore-sync.sh YYYYMMDDHHMMSS.7z database1.sql
|
||||
```
|
||||
|
||||
还原脚本会自动:
|
||||
- 设置 MySQL 为只读模式
|
||||
- 停止复制
|
||||
- 重置二进制日志和 GTID
|
||||
- 导入备份数据(导入时禁用 binlog,避免循环复制)
|
||||
- 设置 GTID purged(从备份时的 GTID 位置)
|
||||
- 恢复 MySQL 为读写模式
|
||||
- **自动启动复制并检查状态**
|
||||
|
||||
#### 步骤 4: 在备份机上启动同步(重要)
|
||||
|
||||
还原完成后,还原脚本会自动启动复制并显示同步状态。确认看到同步成功后,**需要在备份机(主库)上执行以下操作**:
|
||||
|
||||
**A. Docker 执行模式 (包含 -h127.0.0.1):**
|
||||
```bash
|
||||
docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "
|
||||
START REPLICA;
|
||||
"
|
||||
```
|
||||
|
||||
**B. 纯 SQL 模式:**
|
||||
```sql
|
||||
START REPLICA;
|
||||
```
|
||||
|
||||
等待 3 秒后,检查同步状态:
|
||||
|
||||
**A. Docker 执行模式 (包含 -h127.0.0.1):**
|
||||
```bash
|
||||
sleep 3
|
||||
docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "SHOW REPLICA STATUS\G"
|
||||
```
|
||||
|
||||
**B. 纯 SQL 模式:**
|
||||
```sql
|
||||
-- 等待 3 秒后执行
|
||||
SHOW REPLICA STATUS\G;
|
||||
```
|
||||
|
||||
检查关键指标:
|
||||
- `Replica_IO_Running`: 应为 `Yes`
|
||||
- `Replica_SQL_Running`: 应为 `Yes`
|
||||
- `Last_IO_Error`: 应为空
|
||||
- `Last_SQL_Error`: 应为空
|
||||
- `Seconds_Behind_Source`: 延迟秒数(应逐渐减小)
|
||||
|
||||
### 2.3 注意事项
|
||||
|
||||
1. **备份时机**: 建议在业务低峰期执行备份,减少对业务的影响
|
||||
2. **网络传输**: 确保备份机和还原机之间网络畅通,备份文件较大时传输可能需要较长时间
|
||||
3. **磁盘空间**: 确保还原机有足够的磁盘空间存放备份文件和临时解压文件
|
||||
4. **权限要求**: 脚本需要 MySQL root 权限,以及 `/data/backup/mysql/` 目录的读写权限
|
||||
5. **GTID 一致性**: 还原脚本会自动处理 GTID,确保复制能够正常继续
|
||||
6. **备份机同步**: 还原完成后务必在备份机(主库)上执行 `START REPLICA` 并检查状态,确保双向复制正常
|
||||
|
||||
Reference in New Issue
Block a user