备份文件夹+数据库 - Python

时间:2010-03-24 02:06:34

标签: python bash postgresql backup archiving

我觉得这很精致,

我有各种文件夹,我希望将其备份到zip / tar文件中,但希望避免备份 pyc 文件和临时文件等文件。

我还有一个需要备份的Postgres数据库。


有关将此操作作为python脚本运行的提示吗?

另外,无论如何都会阻止流程占用流程中的资源吗?


非常感谢帮助。

4 个答案:

答案 0 :(得分:4)

如果您使用的是Linux(或任何其他形式的Unix,例如MacOSX),那么降低进程优先级的一种简单方法 - 因此间接地,如果其他进程需要某些进程,则间接地消耗CPU - 就是nice命令。在Python(相同的操作系统)中,os.nice可让您的程序“让自己变得更好”(降低优先级& c)。

为了备份PostgreSQL数据库,我建议PostgreSQL's own tools;为了压缩除pyc文件之外的文件夹(和临时文件 - 但是你确定了这些文件),Python非常适合。例如:

>>> os.chdir('/tmp/az')
>>> f = open('/tmp/a.zip', 'wb')
>>> z = zipfile.ZipFile(f, 'w')
>>> for root, dirs, files in os.walk('.'):
...   for fn in files:
...     if fn.endswith('.pyc'): continue
...     fp = os.path.join(root, fn)
...     z.write(fp)
... 
>>> z.close()
>>> f.close()
>>> 

这会压缩所述子树中的所有文件,但以.pyc结尾的文件除外(不压缩 - 如果要压缩,请在zipfile.ZIP_DEFLATED调用中添加第三个参数zipfile.ZipFile)。几乎不容易。

答案 1 :(得分:2)

在linux上,您可以使用带--exclude选项的tar。例如,要排除.pyc文件和临时文件(在此示例中为.tmp

$ tar zcvf backup.tar.gz --exclude "*.tmp" --exclude "*.pyc"

使用z选项将其压缩。

答案 2 :(得分:1)

对于今天的多核cpu,你可能会发现cpu不是瓶颈。现在更有可能需要更好地共享磁盘I / O.

Linux有ionice命令允许你控制这个

  

ionice(1)

     

NAME

   ionice - get/set program io scheduling class and priority
     

概要

   ionice [[-c class] [-n classdata ] [-t]] -p PID [PID ...]

   ionice [-c class] [-n classdata ] [-t] COMMAND [ARG ...]
     

说明
         该程序设置或获取io调度类和优先级   程序。如果没有参数          或者只给出-p,ionice将查询当前的io调度   等级和优先级          过程

答案 3 :(得分:1)

使用您所做的任何备份,备份至少与恢复的重要性一样多。

备份源代码的正确方法是将源文件保留在VCS(版本控制系统)中,并备份VCS存储库。从VCS存储库中排除任何自动生成的易于替换的文件(如*.pyc文件等)。我建议使用Bazaar以获得非常高效的存储空间和用户友好性,但您的团队可能已经拥有了他们喜欢的VCS。

对于PostgreSQL数据库的备份,最好使用pg_dump 定期将数据库转储到文本文件,压缩它,然后备份结果。这是因为通过将数据库转储重新播放到另一台PostgreSQL服务器,备份在任何计算机上都可以恢复。

至于如何自动化它:你最好使用Bash程序,因为它只是将一些命令连接到文件,这是shell擅长的。