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