217 lines
5.8 KiB
Markdown
217 lines
5.8 KiB
Markdown
# 数据库备份和恢复工具使用说明
|
||
|
||
## 概述
|
||
|
||
本项目提供了两个Python脚本用于MySQL数据库的备份和恢复:
|
||
- `backup_database.py` - 数据库备份脚本
|
||
- `restore_database.py` - 数据库恢复脚本
|
||
|
||
## 功能特性
|
||
|
||
### 备份功能
|
||
- ✅ 支持使用 `mysqldump` 命令备份(推荐,速度快)
|
||
- ✅ 支持使用 Python 直接连接备份(备用方案)
|
||
- ✅ 自动检测可用方法(auto模式)
|
||
- ✅ 支持压缩备份文件(.sql.gz格式)
|
||
- ✅ 备份包含表结构、数据、存储过程、触发器、事件等
|
||
- ✅ 自动生成带时间戳的备份文件名
|
||
- ✅ 列出所有备份文件
|
||
|
||
### 恢复功能
|
||
- ✅ 支持使用 `mysql` 命令恢复(推荐,速度快)
|
||
- ✅ 支持使用 Python 直接连接恢复(备用方案)
|
||
- ✅ 自动检测可用方法(auto模式)
|
||
- ✅ 支持恢复压缩的备份文件(.sql.gz格式)
|
||
- ✅ 可选择恢复前删除现有数据库
|
||
- ✅ 测试数据库连接功能
|
||
|
||
## 环境要求
|
||
|
||
- Python 3.6+
|
||
- pymysql 库(已包含在 requirements.txt 中)
|
||
- MySQL客户端工具(可选,用于mysqldump/mysql命令)
|
||
- 数据库连接配置(通过环境变量或默认配置)
|
||
|
||
## 安装依赖
|
||
|
||
```bash
|
||
pip install pymysql python-dotenv
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 1. 数据库备份
|
||
|
||
#### 基本用法(自动选择方法)
|
||
```bash
|
||
python backup_database.py
|
||
```
|
||
|
||
#### 指定备份方法
|
||
```bash
|
||
# 使用mysqldump命令备份
|
||
python backup_database.py --method mysqldump
|
||
|
||
# 使用Python方式备份
|
||
python backup_database.py --method python
|
||
```
|
||
|
||
#### 指定输出文件
|
||
```bash
|
||
python backup_database.py --output backups/my_backup.sql
|
||
```
|
||
|
||
#### 压缩备份文件
|
||
```bash
|
||
python backup_database.py --compress
|
||
```
|
||
|
||
#### 列出所有备份文件
|
||
```bash
|
||
python backup_database.py --list
|
||
```
|
||
|
||
#### 完整示例
|
||
```bash
|
||
# 使用mysqldump备份并压缩
|
||
python backup_database.py --method mysqldump --compress --output backups/finyx_backup.sql.gz
|
||
```
|
||
|
||
### 2. 数据库恢复
|
||
|
||
#### 基本用法(自动选择方法)
|
||
```bash
|
||
python restore_database.py backups/backup_finyx_20241205_120000.sql
|
||
```
|
||
|
||
#### 指定恢复方法
|
||
```bash
|
||
# 使用mysql命令恢复
|
||
python restore_database.py backups/backup.sql --method mysql
|
||
|
||
# 使用Python方式恢复
|
||
python restore_database.py backups/backup.sql --method python
|
||
```
|
||
|
||
#### 恢复压缩的备份文件
|
||
```bash
|
||
python restore_database.py backups/backup.sql.gz
|
||
```
|
||
|
||
#### 恢复前删除现有数据库(危险操作)
|
||
```bash
|
||
python restore_database.py backups/backup.sql --drop-db
|
||
```
|
||
|
||
#### 测试数据库连接
|
||
```bash
|
||
python restore_database.py --test
|
||
```
|
||
|
||
#### 完整示例
|
||
```bash
|
||
# 恢复压缩的备份文件,恢复前删除现有数据库
|
||
python restore_database.py backups/backup.sql.gz --drop-db --method mysql
|
||
```
|
||
|
||
## 备份文件存储
|
||
|
||
- 默认备份目录:`backups/`
|
||
- 备份文件命名格式:`backup_{数据库名}_{时间戳}.sql`
|
||
- 压缩文件格式:`backup_{数据库名}_{时间戳}.sql.gz`
|
||
- 时间戳格式:`YYYYMMDD_HHMMSS`
|
||
|
||
## 数据库配置
|
||
|
||
脚本会自动从以下位置读取数据库配置:
|
||
|
||
1. **环境变量**(优先):
|
||
- `DB_HOST` - 数据库主机(默认: 152.136.177.240)
|
||
- `DB_PORT` - 数据库端口(默认: 5012)
|
||
- `DB_USER` - 数据库用户名(默认: finyx)
|
||
- `DB_PASSWORD` - 数据库密码(默认: 6QsGK6MpePZDE57Z)
|
||
- `DB_NAME` - 数据库名称(默认: finyx)
|
||
|
||
2. **.env文件**:
|
||
在项目根目录创建 `.env` 文件:
|
||
```env
|
||
DB_HOST=152.136.177.240
|
||
DB_PORT=5012
|
||
DB_USER=finyx
|
||
DB_PASSWORD=6QsGK6MpePZDE57Z
|
||
DB_NAME=finyx
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
### 备份注意事项
|
||
1. ⚠️ 备份大数据库时可能需要较长时间,请耐心等待
|
||
2. ⚠️ 确保有足够的磁盘空间存储备份文件
|
||
3. ⚠️ 建议定期备份,并保留多个备份版本
|
||
4. ⚠️ 生产环境建议使用压缩备份以节省空间
|
||
|
||
### 恢复注意事项
|
||
1. ⚠️ **恢复操作会覆盖现有数据,请谨慎操作!**
|
||
2. ⚠️ 恢复前建议先备份当前数据库
|
||
3. ⚠️ 使用 `--drop-db` 选项会删除整个数据库,请确认后再操作
|
||
4. ⚠️ 恢复大数据库时可能需要较长时间
|
||
5. ⚠️ 恢复过程中请勿中断,否则可能导致数据不一致
|
||
|
||
## 常见问题
|
||
|
||
### Q1: 提示找不到 mysqldump 命令?
|
||
**A:** 确保MySQL客户端已安装并在系统PATH中。如果未安装,脚本会自动切换到Python方式备份。
|
||
|
||
### Q2: 备份文件太大怎么办?
|
||
**A:** 使用 `--compress` 选项压缩备份文件,通常可以节省50-80%的空间。
|
||
|
||
### Q3: 恢复时提示表已存在错误?
|
||
**A:** 使用 `--drop-db` 选项先删除数据库再恢复,或者手动删除相关表。
|
||
|
||
### Q4: 如何定时自动备份?
|
||
**A:** 可以使用操作系统的定时任务功能(如Windows的计划任务、Linux的cron):
|
||
```bash
|
||
# Linux crontab示例(每天凌晨2点备份)
|
||
0 2 * * * cd /path/to/project && python backup_database.py --compress
|
||
```
|
||
|
||
### Q5: 备份文件可以恢复到其他数据库吗?
|
||
**A:** 可以,修改环境变量中的 `DB_NAME` 或直接编辑备份文件中的数据库名称。
|
||
|
||
## 示例场景
|
||
|
||
### 场景1: 日常备份
|
||
```bash
|
||
# 每天自动备份并压缩
|
||
python backup_database.py --compress
|
||
```
|
||
|
||
### 场景2: 迁移数据库
|
||
```bash
|
||
# 1. 备份源数据库
|
||
python backup_database.py --output migration_backup.sql
|
||
|
||
# 2. 修改配置指向目标数据库
|
||
|
||
# 3. 恢复备份到目标数据库
|
||
python restore_database.py migration_backup.sql --drop-db
|
||
```
|
||
|
||
### 场景3: 数据恢复
|
||
```bash
|
||
# 1. 查看可用备份
|
||
python backup_database.py --list
|
||
|
||
# 2. 恢复指定备份
|
||
python restore_database.py backups/backup_finyx_20241205_120000.sql
|
||
```
|
||
|
||
## 技术支持
|
||
|
||
如有问题,请检查:
|
||
1. 数据库连接配置是否正确
|
||
2. 数据库服务是否正常运行
|
||
3. 是否有足够的磁盘空间
|
||
4. 是否有数据库操作权限
|
||
|