Резервное копирование папки + базы данных - Python
-
22-09-2019 - |
Вопрос
Я чувствую, что это довольно деликатно,
У меня есть различные папки с проектами, которые я хотел бы создать в zip / tar-файл, но хотел бы избежать резервного копирования таких файлов, как pyc файлы и временные файлы.
У меня также есть база данных Postgres, которую мне нужно создать для резервного копирования.
Есть какие-нибудь советы по выполнению этой операции в виде скрипта на Python?
Кроме того, можно ли каким-либо образом остановить процесс от поглощения ресурсов в процессе?
Мы были бы очень признательны за помощь.
Решение
Если вы используете Linux (или любую другую версию Unix, например MacOSX), простой способ уменьшить приоритет процесса — и, следовательно, косвенно, потребление ресурсов ЦП, если другие процессы этого требуют, — это хороший команда.В Python (те же ОС) ОС.хорошо позволяет вашей программе «стать лучше» (уменьшить приоритет и т. д.).
Для резервного копирования базы данных 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
вызов).Вряд ли может быть проще.
Другие советы
В Linux вы можете использовать tar с --exclude
вариант.например, чтобы исключить ваш .pyc
файлы и временные файлы (в этом примере .tmp
)
$ tar zcvf backup.tar.gz --exclude "*.tmp" --exclude "*.pyc"
использовать z
возможность застегнуть его.
С современными многоядерными процессорами вы можете обнаружить, что центральный процессор - это не бутылочное горлышко.Теперь гораздо больше вероятности, что дисковый ввод-вывод нуждается в более эффективном совместном использовании.
В Linux есть команда 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 ...]
Описание
Эта программа устанавливает или получает класс планирования ввода-вывода и приоритет для программы .Если не указано никаких аргументов или просто -p, ionice запросит текущее планирование ввода-вывода класс и приоритет для этого процесса.
Резервное копирование, по крайней мере, в такой же степени связано с важностью восстановление используя любую резервную копию, которую вы делаете.
Правильный способ резервного копирования исходного кода — это хранить исходные файлы в VCS (системе контроля версий), и создайте резервную копию репозитория VCS.Исключите любые автоматически создаваемые и легко заменяемые файлы (например, *.pyc
файлы и т. д.) из репозитория VCS.Я рекомендую Базар для очень эффективного хранения и удобства использования, но у вашей команды, скорее всего, уже есть система VCS, которую они предпочитают.
Для резервного копирования базы данных PostgreSQL лучше всего использовать pg_dump
к регулярно сбрасывать базу данных в текстовый файл, сожмите это и сохраните результат.Это связано с тем, что резервную копию можно будет восстановить на любом компьютере путем повторного воспроизведения дампа базы данных на другом сервере PostgreSQL.
Что касается того, как это автоматизировать:для этой цели лучше всего использовать программу Bash, поскольку речь идет всего лишь о подключении некоторых команд к файлам, в чем оболочка превосходна.