Резервное копирование папки + базы данных - Python - PullRequest
2 голосов
/ 24 марта 2010

Я чувствую, что это довольно деликатно,

У меня есть различные папки с проектами, которые я хотел бы сделать резервную копию в файл zip / tar, но хотел бы избежать резервного копирования файлов, таких как pyc и временных файлов.

У меня также есть Postgres db, мне нужно сделать резервную копию.


Какие-нибудь советы по запуску этой операции в виде скрипта на python?

Кроме того, было бы в любом случае остановить процесс от ресурсов в процессе?


Помощь будет очень цениться.

Ответы [ 4 ]

4 голосов
/ 24 марта 2010

Если вы работаете в Linux (или в любой другой форме Unix, такой как MacOSX), простой способ уменьшить приоритет процесса - и, следовательно, косвенно, его потребление ЦП, если другие процессы этого хотят, - это хорошая команда. В Python (те же ОС) os.nice позволяет вашей программе «стать лучше» (уменьшить приоритет & c).

Для резервного копирования БД PostgreSQL я рекомендую Собственные инструменты PostgreSQL ; для архивации папки, кроме файлов 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). Вряд ли будет проще.

2 голосов
/ 24 марта 2010

В linux вы можете использовать tar с опцией --exclude. Например, чтобы исключить ваши .pyc файлы и временные файлы (в этом примере .tmp)

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

используйте опцию z, чтобы также сжать ее.

1 голос
/ 24 марта 2010

Резервное копирование, по крайней мере, так же важно, как восстановление с использованием любой резервной копии, которую вы делаете.

Правильный способ сделать резервную копию исходного кода - сохранить исходные файлы в VCS (системе контроля версий) и создать резервную копию хранилища VCS. Исключите любые автоматически сгенерированные легко заменяемые файлы (например, файлы *.pyc и т. Д.) Из хранилища VCS. Я рекомендую Bazaar для очень эффективного хранения и удобства, но ваша команда, вероятно, уже будет иметь VCS, который они предпочитают.

Для резервного копирования базы данных PostgreSQL лучше всего регулярно использовать pg_dump - , чтобы вывести базу данных в текстовый файл , сжать ее и создать резервную копию результата. Это связано с тем, что резервная копия затем восстанавливается на любом компьютере путем повторного воспроизведения дампа базы данных на другом сервере PostgreSQL.

Что касается того, как автоматизировать это: вам лучше всего использовать программу Bash для этой цели, поскольку это всего лишь вопрос подключения некоторых команд к файлам, что и является преимуществом оболочки.

1 голос
/ 24 марта 2010

С сегодняшним многоядерным процессором вы можете обнаружить, что процессор - это не шейка бутылки. Теперь гораздо более вероятно, что дисковый ввод-вывод будет лучше распределен.

В Linux есть команда ionice, позволяющая вам контролировать это

ionice (1)

ИМЯ

   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 класс и приоритет для этого процесс.

...