请用 Python 编写一个脚本,用于定期备份 MySQL 数据库,并说明脚本的核心逻辑。
考察说明
考查 Python 脚本编写能力,以及如何实现数据库定时备份的逻辑。
回答思路
- 【回答框架 1】脚本核心思路:使用 subprocess 调用 mysqldump 命令,或者使用 pymysql 等库导出数据。推荐使用 mysqldump,因为它对 MySQL 特有数据类型支持更好。
- 【回答框架 2】备份流程:先配置数据库连接参数(主机、端口、用户名、密码、备份目录),然后构建命令,执行备份,可添加时间戳生成备份文件名。
- 【回答框架 3】定时调度:可以使用系统的 cron(Linux)或计划任务(Windows)调用脚本,也可以在脚本内使用 time.sleep 循环实现,但更推荐外部调度,更可靠。
- 【回答框架 4】日志与清理:备份后记录日志,可根据保留策略(如保留最近 N 天)定期清理旧备份,防止磁盘耗尽。
- 【回答框架 5】异常处理:捕获子进程执行错误,检查备份文件大小,确保非空,否则重试或报警。
- 【关键点 1】使用 mysqldump 进行逻辑备份,命令格式为 mysqldump -u 用户名 -p密码 数据库名 > 备份文件.sql。
- 【关键点 2】subprocess.run 执行命令,并设置超时和检查返回码。
- 【关键点 3】备份文件名包含时间戳,便于区分和恢复。
- 【关键点 4】定时任务建议使用 cron,避免脚本内部循环导致资源浪费。
- 【关键点 5】备份完成后验证文件大小,防止备份失败产生空文件。
- 【易错点 1】直接在命令行中暴露密码有安全风险,可从环境变量或配置文件读取。
- 【易错点 2】mysqldump 备份时可能锁表,需要根据场景选择 --single-transaction 等选项。
- 【易错点 3】定时备份未考虑磁盘空间和历史备份清理,长期运行会耗尽空间。