В настоящее время каждый день перед тем, как приступить к работе, я выполняю следующую процедуру:
Можно ли (я уверен, что это возможно) автоматизировать этот процесс на Mac OSX? Таким образом, это делается к тому времени, когда я выхожу на работу утром. Если да, то каков самый быстрый и простой способ
Чтобы разрешить ssh-вход на рабочий сервер без ввода пароля, вам необходимо настроить неинтерактивную аутентификацию, если она еще не настроена.
http://www.walkernews.net/2008/06/06/how-to-setup-non-interactive-ssh-login/
http://troy.jdmz.net/rsync/index.html
Затем в основном нужно добавить команды для каждого шага в сценарий оболочки и настроить cron для запуска этого сценария оболочки каждое утро.
Сначала вам нужно настроить свой ssh-сервер так, чтобы он принимал ключи RSA, а не парольную фразу. Это описано в другом месте. Затем вам нужно будет настроить учетную запись, которую вы планируете использовать, чтобы иметь соответствующий ключ DSA / RSA, который позволит этой учетной записи автоматически входить в систему.
* ssh to the production server
В этом нет необходимости. Вы можете напрямую выполнять команды на удаленном сервере, используя -C
вариант. Например, следующие два упомянутых вами шага ...
* gzip our daily database dump file
* scp the gzipped dump file over to my computer
... будет выглядеть примерно так:
ssh user@some.server.net -C 'gzip dump > dump.gz'
scp user@some.server.net:/path/to/dump/dump.gz /path/to/destination/dump.gz
Поместите каждую только что упомянутую команду вместе с остальными командами, которые вы вводите вручную, в один файл. Команды должны быть в той же последовательности, в которой вы их обычно набираете. Мы назовем это dump-script.sh
для этого примера. При необходимости измените владельца и разрешения, чтобы файл запустился.
Существует очень высокая вероятность потери данных, если вы не выполните проверку ошибок в своем скрипте. Пока вы не добавите в скрипт обработку ошибок, есть без гарантии что он будет работать правильно в 100% случаев. С помощью команды удаления базы данных при определенных обстоятельствах довольно легко потерять все данные на машине, которая получает дамп. Скорее всего, вы захотите расширить и украсить свой скрипт, чтобы обеспечить обнаружение ошибок, чтобы он только УДАЛЯЛ БАЗУ ДАННЫХ и импортировал новые данные. когда перевод успешен. Если вас это не устраивает, не запускайте его и не создавайте записи crontab.
После того, как ваш скрипт отлажен и вы убедитесь, что он правильно обрабатывает ошибки, вы можете рассмотреть возможность добавления его в обычное расписание cron. Войдите в систему под учетной записью, которую вы хотите использовать для выполнения этих действий, введите:
crontab -e
.... что должно дать вам редактор. Создайте такую запись:
# Nightly Database Dump, at Midnight
0 0 * * * /path/to/my/dump-script.sh
... затем введите :wq
в этом порядке и нажмите Enter (при условии, что vi
ваш текстовый редактор по умолчанию).
Лучшее решение: если у вас есть сетевой доступ к базе данных PostgreSQL, почему бы просто не выгрузить базу данных по сети, используя удаленное соединение? Это намного чище, и его можно комбинировать с небольшим количеством сценариев, чтобы сделать его прямым «конвейером» данных от одного к другому.
Да - напишите сценарий и запланируйте часть gzip / scp (или еще лучше, сделайте ее rsync) с вашего сервера. Если это еще и MacOS, я не уверен, какие подробные шаги это сделать, но это краткое изложение того, что вам нужно.
Затем, если вы знаете, что это всегда будет выполняться к определенному времени, просто запланируйте сценарий на своем компьютере для gunzip / dropdb / createdb / psql. Если это не всегда делается в одно и то же время, то вы можете сделать что-нибудь интересное с проверкой состояния файла, времени изменения и т. Д.
В каких частях вышеперечисленного вы не уверены или считаете, что вам нужны более подробные сведения? Вы новичок в написании сценариев или не знаете, как планировать что-то с помощью cron или чего-то еще?
Поддерживает ли PostGRES какой-либо вид доставки журналов или зеркалирования изначально? Если да, то это может быть лучшее универсальное решение.