Ответ 1
Вот подробные сведения о том, как это сделать для postgres.
Создать пользователя резервного копирования
Сценарии предполагают существование пользователя под названием "backup", который имеет доступ ко всем (суперпользователю) или к конкретной базе данных. Учетные данные хранятся в файле .pgpass в домашнем каталоге. Этот файл выглядит так (предполагая, что пароль "секретный" ).
~/.pgpass
*:*:*:backup:secret
Убедитесь, что вы установите правильную защиту на .pgpass или проигнорируете ее
chmod 0600 ~/.pgpass
Резервное копирование единой базы данных
Отбрасывает определенную базу данных.
backup.sh
pg_dump dbname -U backup > backup.sql
git add .
git commit -m "backup"
git push origin master
Примечание. Вероятно, вы не хотите использовать какие-либо параметры разделения файлов для дампа БД, поскольку любая вставка/удаление приведет к эффекту "домино" и изменит все файлы, создавая больше дельт/изменений в git.
Резервное копирование всех баз данных на этом компьютере
Этот script сбрасывает весь кластер базы данных (все базы данных):
pg_dumpall -U backup > backup.sql
git add .
git commit -m "backup"
git push origin master
Примечание. Вероятно, вы не хотите использовать какие-либо параметры разделения файлов для дампа БД, поскольку любая вставка/удаление приведет к эффекту "домино" и изменит все файлы, создавая больше дельт/изменений в git.
Запланируйте его для запуска
Последний шаг - добавить это к заданию cron. Итак, "crontab -e", а затем добавьте что-то вроде следующего (работает каждый день в полночь)
# m h dom mon dow command
# run postgres backup to git
0 0 * * * /home/ubuntu/backupdbtogit/backup.sh
Восстановление
Если вам нужно восстановить базу данных, вы проверите версию, которую хотите восстановить, а затем перейдите к pg. (подробнее об этом здесь http://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP-RESTORE)
для одной базы данных:
psql dbname < infile
для всего кластера
psql -f infile postgres
Ничто из этого не было особенно сложным, но оно всегда утомительно смотрело на все части.
Сбой на сервере с ограниченной оперативной памятью
У меня возникла проблема с git неудачей при нажатии. Это связано с тем, что git использовал много памяти - несколько коммитов поддержали. Я разрешил сбой, установив сервер git repo на моем локальном компьютере (в котором много ОЗУ). Я установил серверный диск с помощью sshfs, а затем зафиксировал его на своей рабочей станции. После того, как я это сделал, сервер с низкой памятью возобновил работу без проблем.
Лучшей альтернативой является ограничение использования памяти git во время пакета (от Есть ли способ ограничить объем памяти, который "git gc" использует?).
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
Примечание. Я еще не пробовал устанавливать ограничение памяти, так как у меня еще не была проблема с откатом.