影刀RPA进阶教程数据备份自动化定时备份Excel数据库与配置文件的完整方案你花了两个月搭建的RPA流程突然有一天电脑蓝屏了。重启之后配置文件坏了SQLite数据库损坏了Excel模板被覆盖成空文件了。你盯着屏幕心里只有一个念头为什么没有备份数据备份——开发者最容易忽略、但出问题时最后悔没做的事。RPA项目需要备份什么不是所有文件都需要备份但以下三类必须备份第一类数据库文件SQLite .db 文件本地Access .mdb文件任何存了业务数据的文件丢失后果历史数据全没业务方会找你算账。第二类配置文件账号密码表ExcelCookie/Token文件API密钥配置流程参数表丢失后果所有流程跑不起来挨个重新配置。第三类流程文件本身.flow 影刀流程文件自定义Python脚本影刀应用备份丢失后果白写了。虽然影刀有云端存储但本地备份更安心。拼多多店群自动化报活动上架方案一Python脚本定时备份最灵活、最可控的方案。基础备份脚本importshutilimportosfromdatetimeimportdatetimeimportzipfileclassBackupManager:def__init__(self,backup_root):self.backup_rootbackup_root self.todaydatetime.now().strftime(%Y-%m-%d)self.backup_diros.path.join(backup_root,self.today)defprepare_dir(self):创建每日备份目录os.makedirs(self.backup_dir,exist_okTrue)defbackup_file(self,file_path,prefix):备份单个文件带时间戳ifnotos.path.exists(file_path):print(f⚠ 文件不存在跳过{file_path})returnFalsefilenameos.path.basename(file_path)timestampdatetime.now().strftime(%H%M%S)backup_namef{prefix}{timestamp}_{filename}destos.path.join(self.backup_dir,backup_name)shutil.copy2(file_path,dest)print(f✓ 已备份{filename}→{backup_name})returnTruedefbackup_folder(self,folder_path):备份整个文件夹为zipifnotos.path.exists(folder_path):print(f⚠ 文件夹不存在跳过{folder_path})returnFalsefolder_nameos.path.basename(folder_path)timestampdatetime.now().strftime(%H%M%S)zip_namef{timestamp}_{folder_name}.zipzip_pathos.path.join(self.backup_dir,zip_name)withzipfile.ZipFile(zip_path,w,zipfile.ZIP_DEFLATED)aszf:forroot,dirs,filesinos.walk(folder_path):forfileinfiles:file_pathos.path.join(root,file)arcnameos.path.relpath(file_path,folder_path)zf.write(file_path,arcname)print(f✓ 已打包{folder_name}→{zip_name})returnTruedefcleanup_old(self,keep_days30):清理超过N天的备份cutoffdatetime.now().timestamp()-keep_days*86400forfolder_nameinos.listdir(self.backup_root):folder_pathos.path.join(self.backup_root,folder_name)ifos.path.isdir(folder_path):folder_timeos.path.getmtime(folder_path)iffolder_timecutoff:shutil.rmtree(folder_path)print(f 已清理过期备份{folder_name})# 使用bmBackupManager(D:/RPA_Backups)bm.prepare_dir()bm.backup_file(D:/RPA/data.db,db_)bm.backup_file(D:/RPA/accounts.xlsx,config_)bm.backup_folder(D:/RPA/scripts)bm.cleanup_old(keep_days30)print(备份完成)为什么用日期文件夹而不是全堆一起D:/RPA_Backups/ ├── 2024-01-14/ │ ├── 083000_data.db │ ├── 083001_accounts.xlsx │ └── 083002_scripts.zip ├── 2024-01-15/ │ └── ...日期文件夹结构清晰找历史备份一目了然。回滚时直接定位到日期。方案二备份逻辑强化版基础备份够用但有几个问题万一备份过程中源文件正在被写入备份出来的文件可能损坏备份文件越来越多磁盘满了没人管备份失败了没人知道增强版安全复制大小检查告警importhashlibimporttimedefsafe_backup(src_path,dest_path):安全备份先复制到临时文件校验后再改名tmp_pathdest_path.tmptry:# 1. 复制到临时文件shutil.copy2(src_path,tmp_path)# 2. 等待1秒确保写入完成time.sleep(1)# 3. 校验文件大小src_sizeos.path.getsize(src_path)tmp_sizeos.path.getsize(tmp_path)ifsrc_size!tmp_size:raiseException(f文件大小不一致{src_size}vs{tmp_size})# 4. 校验MD5可选大文件耗时# src_md5 hashlib.md5(open(src_path,rb).read()).hexdigest()# tmp_md5 hashlib.md5(open(tmp_path,rb).read()).hexdigest()# if src_md5 ! tmp_md5:# raise Exception(MD5不一致)# 5. 重命名原子操作os.replace(tmp_path,dest_path)returnTrueexceptExceptionase:# 清理临时文件ifos.path.exists(tmp_path):os.remove(tmp_path)print(f❌ 备份失败{src_path}→{e})returnFalse增强版磁盘空间监控importshutildefcheck_disk_space(backup_root,min_free_gb5):检查磁盘剩余空间usageshutil.disk_usage(backup_root)free_gbusage.free/(1024**3)iffree_gbmin_free_gb:print(f⚠ 磁盘空间不足剩余{free_gb:.1f}GB)# 触发清理或告警returnFalsereturnTrue方案三数据库专用备份SQLite文件的备份不能用简单的文件复制——因为有写入锁的问题。importsqlite3defbackup_sqlite(db_path,backup_path):使用SQLite的backup API安全备份srcsqlite3.connect(db_path)dstsqlite3.connect(backup_path)try:src.backup(dst)print(f✓ 数据库备份完成{backup_path})finally:dst.close()src.close()SQLite的.backup()方法会处理写入锁的问题即使在数据库被写入时也能安全备份。在影刀中集成定时备份流程影刀备份流程每天凌晨2:00运行 1. 关闭所有正在写入数据库的流程防锁冲突 2. Python代码块执行备份脚本 - 备份data.db使用SQLite backup API - 备份accounts.xlsx - 打包scripts文件夹 3. 检查备份结果 - 所有文件备份成功 → 记录日志 - 任一备份失败 → 发送企微告警 4. 清理30天前的旧备份 5. 可选备份文件上传到云盘/对象存储触发方式影刀计划任务设置为每天凌晨2:00运行避开业务高峰。备份策略最佳实践3-2-1原则3份副本除了原始数据至少2个备份2种介质本地硬盘一份云存储/U盘/另一台机器一份1份异地至少有一份备份不在同一位置对个人RPA项目本地硬盘云盘就符合3-2-1。保留策略备份类型保留天数原因数据库每日备份30天数据变化频繁需要找回历史配置文件90天配置不常变多留一些流程脚本永久代码是无价的测试恢复很多人做了备份但从没测试过恢复——真正要用的时候发现备份文件是坏的。TEMU店群矩阵自动化运营核价报活动每月1号做一次恢复演练随便选一个几天前的备份恢复到临时目录验证数据完整性。避坑清单坑1备份了正在写入的文件影刀流程正在写Excel你的备份脚本同时去复制——复制出来的文件大概率不完整。解决备份时间安排在流程空闲时段凌晨或先检查文件是否被占用。坑2备份目录和源文件在同一块硬盘硬盘坏了备份也一起没了。解决备份到不同硬盘、移动硬盘或云存储。坑3备份脚本本身丢了备份脚本应该放在独立的位置比如云盘/Git仓库不能和业务流程放在一起。总结备份这件事平时想不起来出事的时候才追悔莫及。投入半小时写的备份脚本影刀定时任务可能在未来某天救你一命。记住三个数字3份副本、2种介质、1份异地。每天自动跑一次每月手动恢复测试一次。你的数据比你的流程更值钱。内容标签#影刀RPA #数据安全 #备份 #SQLite #运维作者林焱系列影刀RPA进阶教程系列——把自动化流程当作工程来维护