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

5.8 KiB
Raw Blame History

数据库备份和恢复工具使用说明

概述

本项目提供了两个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

数据库配置

脚本会自动从以下位置读取数据库配置:

  1. 环境变量(优先):

    • DB_HOST - 数据库主机(默认: 152.136.177.240
    • DB_PORT - 数据库端口(默认: 5012
    • DB_USER - 数据库用户名(默认: finyx
    • DB_PASSWORD - 数据库密码(默认: 6QsGK6MpePZDE57Z
    • DB_NAME - 数据库名称(默认: finyx
  2. .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

# 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

技术支持

如有问题,请检查:

  1. 数据库连接配置是否正确
  2. 数据库服务是否正常运行
  3. 是否有足够的磁盘空间
  4. 是否有数据库操作权限