前言
数据丢了才想起来备份?服务器宕机、误删文件、数据库清空,这些事故每天都在发生。备份这件事,手动做容易忘,忘了就出事。**让脚本每天自动备份,是最省心的方案。**今天分享一套Python自动备份脚本:数据库、文件、配置一键打包,定时自动执行,留存最近N份,磁盘不爆。—## 一、备份要备份什么-数据库:网站/项目的核心数据-重要文件:配置、代码、文档-服务器配置:nginx、面板设置等思路:每天定时打包 → 存到备份目录 → 只保留最近N份 → 可选上传云端。—## 二、核心备份脚本pythonimport shutilimport subprocessimport datetimeimport os# 备份目录BACKUP_DIR = "/root/backups"# 要备份的文件/目录TARGETS = [ "/root/site", # 网站代码 "/etc/nginx", # nginx配置]# 数据库信息DB_NAME = "myapp"DB_USER = "root"DB_PASS = "你的数据库密码"# 保留最近几份KEEP = 7def backup_files(): """打包文件""" date = datetime.datetime.now().strftime("%Y%m%d_%H%M") archive = os.path.join(BACKUP_DIR, f"files_{date}.tar.gz") os.makedirs(BACKUP_DIR, exist_ok=True) for target in TARGETS: subprocess.run(["tar", "-czf", archive, target], check=True) return archivedef backup_db(): """备份数据库""" date = datetime.datetime.now().strftime("%Y%m%d_%H%M") dump = os.path.join(BACKUP_DIR, f"db_{date}.sql") cmd = f"mysqldump -u{DB_USER} -p{DB_PASS} {DB_NAME} > {dump}" subprocess.run(cmd, shell=True, check=True) return dumpdef cleanup(): """清理旧备份,只保留最近K份""" files = sorted(os.listdir(BACKUP_DIR)) while len(files) > KEEP: os.remove(os.path.join(BACKUP_DIR, files.pop(0)))if __name__ == "__main__": backup_files() backup_db() cleanup() print(f"备份完成,保留最近{KEEP}份")核心逻辑:打包 → 导库 → 清理,三步搞定。—## 三、配置定时任务bashcrontab -e每天凌晨备份一次:0 2 * * * cd /root && python3 backup.py >> backup.log 2>&1凌晨2点自动备份,早上起来看日志确认。—