添加 README.md
This commit is contained in:
324
README.md
Normal file
324
README.md
Normal file
@@ -0,0 +1,324 @@
|
||||
# MySQL 8.0.24 备份恢复工具集
|
||||
|
||||
一套完整的 MySQL 8.0.24 备份恢复解决方案,包含全量备份、增量备份、恢复脚本及自动化测试。
|
||||
|
||||
## 📁 项目结构
|
||||
|
||||
```
|
||||
mysql-backup-scripts/
|
||||
├── config.sh # 配置文件
|
||||
├── lib/
|
||||
│ └── common.sh # 公共函数库
|
||||
├── full_backup.sh # 全量备份脚本
|
||||
├── incremental_backup.sh # 增量备份脚本
|
||||
├── restore_full.sh # 全量备份恢复脚本
|
||||
├── restore_incremental.sh # 增量备份恢复脚本
|
||||
├── test_backup_restore.sh # 自动化测试脚本
|
||||
└── README.md # 本文档
|
||||
```
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 1. 配置
|
||||
|
||||
编辑 `config.sh` 文件,根据实际环境修改以下配置:
|
||||
|
||||
```bash
|
||||
# MySQL 连接配置
|
||||
MYSQL_HOST="localhost"
|
||||
MYSQL_PORT="3306"
|
||||
MYSQL_USER="root"
|
||||
MYSQL_PASSWORD="your_password"
|
||||
|
||||
# 备份存储配置
|
||||
BACKUP_ROOT_DIR="/data/mysql_backup"
|
||||
```
|
||||
|
||||
### 2. 设置脚本权限
|
||||
|
||||
```bash
|
||||
chmod +x *.sh
|
||||
chmod +x lib/*.sh
|
||||
```
|
||||
|
||||
### 3. 执行备份
|
||||
|
||||
```bash
|
||||
# 全量备份所有数据库
|
||||
./full_backup.sh
|
||||
|
||||
# 全量备份指定数据库
|
||||
./full_backup.sh -d mydb
|
||||
|
||||
# 增量备份
|
||||
./incremental_backup.sh
|
||||
```
|
||||
|
||||
## 📋 脚本说明
|
||||
|
||||
### 全量备份 (full_backup.sh)
|
||||
|
||||
使用 `mysqldump` 进行逻辑全量备份。
|
||||
|
||||
**功能特点:**
|
||||
- 支持单数据库或所有数据库备份
|
||||
- 记录 binlog 位置用于后续增量备份
|
||||
- 支持压缩备份(gzip/pigz/lz4)
|
||||
- 自动清理过期备份
|
||||
- 完善的错误处理和日志记录
|
||||
|
||||
**使用方法:**
|
||||
```bash
|
||||
./full_backup.sh [选项]
|
||||
|
||||
选项:
|
||||
-d, --database <name> 指定要备份的数据库 (可多次使用)
|
||||
-c, --compress 启用压缩 (默认)
|
||||
-n, --no-compress 禁用压缩
|
||||
-h, --help 显示帮助信息
|
||||
|
||||
示例:
|
||||
./full_backup.sh # 备份所有数据库
|
||||
./full_backup.sh -d mydb # 仅备份 mydb 数据库
|
||||
./full_backup.sh -d db1 -d db2 # 备份多个指定数据库
|
||||
```
|
||||
|
||||
### 增量备份 (incremental_backup.sh)
|
||||
|
||||
基于 MySQL binlog 的增量备份。
|
||||
|
||||
**功能特点:**
|
||||
- 基于 binlog 实现增量备份
|
||||
- 从上次全量/增量备份点开始备份
|
||||
- 支持压缩
|
||||
- 自动清理过期备份
|
||||
|
||||
**前提条件:**
|
||||
- 必须先执行过全量备份
|
||||
- MySQL 必须启用 binlog (`log_bin=ON`)
|
||||
- MySQL 用户需要 `REPLICATION SLAVE`, `REPLICATION CLIENT` 权限
|
||||
|
||||
**使用方法:**
|
||||
```bash
|
||||
./incremental_backup.sh [选项]
|
||||
|
||||
选项:
|
||||
-f, --full-backup <path> 指定全量备份基准目录
|
||||
-b, --base-backup <path> 指定增量备份基准目录 (用于增量链)
|
||||
-c, --compress 启用压缩 (默认)
|
||||
-n, --no-compress 禁用压缩
|
||||
-h, --help 显示帮助信息
|
||||
|
||||
示例:
|
||||
./incremental_backup.sh # 基于最新全量备份
|
||||
./incremental_backup.sh -f /path/to/full_backup # 指定全量备份
|
||||
```
|
||||
|
||||
### 全量备份恢复 (restore_full.sh)
|
||||
|
||||
从全量备份恢复数据库。
|
||||
|
||||
**功能特点:**
|
||||
- 支持恢复全部数据库或指定数据库
|
||||
- 自动解压压缩备份
|
||||
- 恢复前可选择性备份当前数据
|
||||
- 支持验证恢复结果
|
||||
|
||||
**使用方法:**
|
||||
```bash
|
||||
./restore_full.sh [选项] <备份目录>
|
||||
|
||||
选项:
|
||||
-d, --database <name> 仅恢复指定数据库
|
||||
-y, --yes 跳过确认提示
|
||||
--no-backup 恢复前不备份当前数据
|
||||
-h, --help 显示帮助信息
|
||||
|
||||
示例:
|
||||
./restore_full.sh /path/to/backup
|
||||
./restore_full.sh -d mydb /path/to/backup
|
||||
./restore_full.sh -y --no-backup /path/to/backup
|
||||
```
|
||||
|
||||
### 增量备份恢复 (restore_incremental.sh)
|
||||
|
||||
应用增量备份中的 binlog。
|
||||
|
||||
**功能特点:**
|
||||
- 基于 binlog 应用增量变更
|
||||
- 支持指定时间点恢复 (PITR)
|
||||
- 自动处理备份链
|
||||
|
||||
**使用方法:**
|
||||
```bash
|
||||
./restore_incremental.sh [选项] <增量备份目录>
|
||||
|
||||
选项:
|
||||
-d, --database <name> 仅恢复指定数据库
|
||||
-t, --stop-datetime <time> 指定恢复到的时间点 (格式: 'YYYY-MM-DD HH:MM:SS')
|
||||
-y, --yes 跳过确认提示
|
||||
-h, --help 显示帮助信息
|
||||
|
||||
示例:
|
||||
./restore_incremental.sh /path/to/incr_backup
|
||||
./restore_incremental.sh -t '2023-12-20 15:30:00' /path/to/incr_backup
|
||||
```
|
||||
|
||||
### 自动化测试 (test_backup_restore.sh)
|
||||
|
||||
自动化测试备份和恢复功能。
|
||||
|
||||
**测试流程:**
|
||||
1. 创建测试数据库和测试数据
|
||||
2. 执行全量备份
|
||||
3. 添加增量数据
|
||||
4. 执行增量备份
|
||||
5. 删除测试数据库(模拟数据丢失)
|
||||
6. 从全量备份恢复
|
||||
7. 应用增量备份
|
||||
8. 验证数据完整性
|
||||
9. 清理测试数据
|
||||
|
||||
**使用方法:**
|
||||
```bash
|
||||
./test_backup_restore.sh [选项]
|
||||
|
||||
选项:
|
||||
--skip-cleanup 测试后不清理数据
|
||||
--verbose 显示详细输出
|
||||
-h, --help 显示帮助信息
|
||||
```
|
||||
|
||||
## 📂 备份目录结构
|
||||
|
||||
```
|
||||
/data/mysql_backup/
|
||||
├── full/ # 全量备份目录
|
||||
│ └── mysql_backup_full_20231220_120000/ # 单次全量备份
|
||||
│ ├── all_databases.sql.gz # 全库备份文件
|
||||
│ ├── binlog_position.txt # binlog 位置
|
||||
│ └── metadata.txt # 备份元数据
|
||||
├── incremental/ # 增量备份目录
|
||||
│ └── mysql_backup_incr_20231220_180000/ # 单次增量备份
|
||||
│ ├── mysql-bin.000001.gz # binlog 备份
|
||||
│ ├── binlog_position.txt # binlog 位置
|
||||
│ ├── base_backup_path.txt # 基准备份路径
|
||||
│ └── metadata.txt # 备份元数据
|
||||
├── logs/ # 日志目录
|
||||
│ ├── full_backup_20231220_120000.log
|
||||
│ └── incremental_backup_20231220_180000.log
|
||||
└── restore_tmp/ # 恢复临时目录
|
||||
```
|
||||
|
||||
## ⚙️ MySQL 配置要求
|
||||
|
||||
为了支持增量备份,需要在 MySQL 配置文件 (my.cnf) 中启用 binlog:
|
||||
|
||||
```ini
|
||||
[mysqld]
|
||||
# 启用 binlog
|
||||
log_bin = mysql-bin
|
||||
server-id = 1
|
||||
binlog_format = ROW
|
||||
|
||||
# 可选:设置 binlog 过期时间
|
||||
expire_logs_days = 7
|
||||
# 或者在 MySQL 8.0 中使用
|
||||
binlog_expire_logs_seconds = 604800
|
||||
```
|
||||
|
||||
## 🔐 MySQL 用户权限
|
||||
|
||||
备份用户需要以下权限:
|
||||
|
||||
```sql
|
||||
GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, RELOAD,
|
||||
REPLICATION CLIENT, REPLICATION SLAVE, EVENT, PROCESS
|
||||
ON *.* TO 'backup_user'@'localhost';
|
||||
```
|
||||
|
||||
## 🔄 典型恢复流程
|
||||
|
||||
### 场景 1:完全恢复
|
||||
|
||||
```bash
|
||||
# 1. 恢复最新的全量备份
|
||||
./restore_full.sh /data/mysql_backup/full/mysql_backup_full_20231220_120000
|
||||
|
||||
# 2. 按顺序应用所有增量备份
|
||||
./restore_incremental.sh /data/mysql_backup/incremental/mysql_backup_incr_20231220_180000
|
||||
./restore_incremental.sh /data/mysql_backup/incremental/mysql_backup_incr_20231221_060000
|
||||
```
|
||||
|
||||
### 场景 2:时间点恢复 (PITR)
|
||||
|
||||
```bash
|
||||
# 1. 恢复全量备份
|
||||
./restore_full.sh /data/mysql_backup/full/mysql_backup_full_20231220_120000
|
||||
|
||||
# 2. 应用增量备份到指定时间点
|
||||
./restore_incremental.sh -t '2023-12-20 15:30:00' /data/mysql_backup/incremental/mysql_backup_incr_20231220_180000
|
||||
```
|
||||
|
||||
### 场景 3:单数据库恢复
|
||||
|
||||
```bash
|
||||
# 1. 恢复指定数据库的全量备份
|
||||
./restore_full.sh -d mydb /data/mysql_backup/full/mysql_backup_full_20231220_120000
|
||||
|
||||
# 2. 应用增量备份
|
||||
./restore_incremental.sh -d mydb /data/mysql_backup/incremental/mysql_backup_incr_20231220_180000
|
||||
```
|
||||
|
||||
## ⏰ 定时任务配置
|
||||
|
||||
推荐的 crontab 配置:
|
||||
|
||||
```cron
|
||||
# 每天凌晨 2 点执行全量备份
|
||||
0 2 * * * /path/to/mysql-backup-scripts/full_backup.sh >> /var/log/mysql_backup.log 2>&1
|
||||
|
||||
# 每隔 6 小时执行增量备份 (除了全量备份时间)
|
||||
0 8,14,20 * * * /path/to/mysql-backup-scripts/incremental_backup.sh >> /var/log/mysql_backup.log 2>&1
|
||||
```
|
||||
|
||||
## 🐛 错误处理
|
||||
|
||||
所有脚本都包含完善的错误处理:
|
||||
|
||||
1. **连接错误**:无法连接 MySQL 时会输出详细错误信息
|
||||
2. **权限错误**:权限不足时会提示所需权限
|
||||
3. **磁盘空间**:备份前检查磁盘空间是否充足
|
||||
4. **锁定机制**:防止同时运行多个备份进程
|
||||
5. **日志记录**:所有操作都记录到日志文件
|
||||
|
||||
## 📝 日志示例
|
||||
|
||||
```
|
||||
[INFO] [2023-12-20 12:00:00] ============================================================
|
||||
[INFO] [2023-12-20 12:00:00] MySQL 全量备份开始
|
||||
[INFO] [2023-12-20 12:00:00] ============================================================
|
||||
[INFO] [2023-12-20 12:00:00] 检查 MySQL 连接...
|
||||
[INFO] [2023-12-20 12:00:00] MySQL 连接成功
|
||||
[INFO] [2023-12-20 12:00:00] 记录 binlog 位置信息
|
||||
[INFO] [2023-12-20 12:00:00] Binlog 位置: mysql-bin.000005:12345
|
||||
[INFO] [2023-12-20 12:00:01] 备份所有数据库
|
||||
[INFO] [2023-12-20 12:05:00] 全库备份完成,大小: 2.5G
|
||||
[INFO] [2023-12-20 12:05:00] 备份验证通过
|
||||
[INFO] [2023-12-20 12:05:00] ============================================================
|
||||
[INFO] [2023-12-20 12:05:00] MySQL 全量备份完成
|
||||
[INFO] [2023-12-20 12:05:00] 执行耗时: 00:05:00
|
||||
[INFO] [2023-12-20 12:05:00] ============================================================
|
||||
```
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
1. **生产环境使用前请充分测试**
|
||||
2. **建议在低峰期执行全量备份**
|
||||
3. **定期验证备份可恢复性**
|
||||
4. **保持备份存储的安全性**
|
||||
5. **监控备份任务的执行状态**
|
||||
|
||||
## 📄 许可证
|
||||
|
||||
MIT License
|
||||
Reference in New Issue
Block a user