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