ai-business-write/数据库备份恢复说明.md

217 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数据库备份和恢复工具使用说明
## 概述
本项目提供了两个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. 是否有数据库操作权限