- PVSM.RU - https://www.pvsm.ru -
Данная статья предназначена конечно не для админов, а скорее для веб-разработчиков, у которых на сервере неспешно наполняется БД небольшого объема. И вроде бы данные туда так и поступают — неспешно и небольшие, и ничто не предвещает беды, но все равно как-то не по себе. А вдруг завтра случится микроколлапс внутри данного конкретного сервера или данной конкретной хостинг-компании. И везде мерещатся злые хакеры и боты.
В общем, чтобы спать спокойно, нужно обеспечить периодическое сохранение содержимого БД вне рабочего сервера на случай, если по каким-то причинам доступ к содержимому сервера будет утерян. Для тех, кто (как и я) не дорос еще до репликаций БД на отдельных серверах, мой ответ — отправляйте дампы по почте.
Не буду рассказывать здесь, что возможны альтернативные (возможно более правильные) способы достичь того же эффекта. Здесь описано то, как это сделал я, какие встречались грабли.
Итак, весь процесс условно делится на три части:
Наша ОС — Ubuntu.
Наша СУБД — Postgresql.
Допустим:
Если мы сейчас попытаемся выполнить команду дампа…
pg_dump -U postgresuser -h localhost --inserts mydatabase | gzip > /tmp/pg_dump.sql.gz
… то скорее всего терминал запросит у Вас пароль. Но это нас не устраивает, т.к. данная команда будет выполняться автоматически в bash-скрипте, и хотелось бы, чтобы пароль подставлялся сам.
Для этого в домашней папке Ubuntu-юзера (допустим — sergey) создаем скрытый файл .pgpass. На всякий случай, это будет выглядеть вот так:
/home/sergey/.pgpass
Открываем этот файл и вставляем одну строчку:
localhost:5432:mydatabase:postgresuser:userpass
… где
Теперь команда…
pg_dump -U postgresuser -h localhost --inserts mydatabase | gzip > /tmp/pg_dump.sql.gz
… должна завершиться созданием архива pg_dump.sql.gz в папке /tmp.
ERRORS: Возможно появление ошибок, связанных с разрешениями на БД, которые возникают из-за того, что пользователь postgresuser не имеет права на БД mydatabase. Нужно ему их предоставить.
Не буду рассказывать об истории и разнообразии почтовых клиентов под Linux (тем более что сам не знаю). Короче, ставите mutt.
sudo apt-get install mutt
В домашней папке Ubuntu-юзера (а мы помним, что это — /home/sergey/, и там еще лежит файл .pgpass) создаем скрытый файл .muttrc и вставляем внутрь файла примерно следующее:
set from = moya_pochta@gmail.com
set imap_user = moya_pochta@gmail.com
set imap_pass = "pochtapass"
set smtp_url = smtp://moya_pochta@smtp.gmail.com:587/
set smtp_pass = "pochtapass"
# don't let your firewall kill your idle connection
set imap_keepalive = 900
# do not copy sent mail
set copy = no
set move = no
set folder = imaps://imap.gmail.com:993
set spoolfile = +INBOX #or +[Gmail]/Important
set postponed = +[Gmail]/Drafts
# cache
set header_cache = ~/.mutt/cache/headers
set message_cachedir = ~/.mutt/cache/bodies
set certificate_file = ~/.mutt/certificates
… где
— moya_pochta@gmail.com — адрес, ОТКУДА будут отсылаться дампы;
— pochtapass — пароль от этой почты.
Если у Вас почта Yandex, то в 4-й строчке вместо gmail.com вставляете yandex.ru, и все будет работать.
Пробуем отправлять наш файл:
mutt -s "Dump" -a /tmp/pg_dump.sql.gz -- drugaya_pochta@gmail.com < /dev/null
Здесь:
ERRORS: Вы можете получить следующею ошибку — SASL authentication. Это значит, что не удалось войти в почту-отправитель (это которая — moya_pochta@gmail.com). Причин я насчитал три:
Для начала пишем скрипт pg_mutt.sh и кладем вот сюда /home/sergey/ (в данном случае не важно — куда).
#!/bin/bash
EMAIL="drugaya_pochta@gmail.com"
DATABASE="mydatabase"
DATE=$(date +"%Y-%m-%d")
FILE="/tmp/pg_dump_${DATABASE}_$DATE.sql.gz"
pg_dump -U postgresuser -h localhost --inserts $DATABASE | gzip > $FILE
mutt -s "Dump $DATABASE $DATE" -a $FILE -- $EMAIL < /dev/null
Здесь Вам нужно заменить drugaya_pochta@gmail.com, mydatabase, postgresuser на свои данные.
Делаем файл pg_mutt.sh исполняемым:
chmod +x pg_mutt.sh
Создаем задачу cron, чтобы срабатывало каждое воскресенье в 3.00:
crontab -e
0 3 * * 0 /home/sergey/pg_mutt.sh
Обязательно периодически проверяйте содержание того, что приходит в виде файла с названием pg_dump_mydatabase_*.sql.gz, потому что может так получиться, что Вы вроде теперь спите спокойно, а не следовало бы.
Автор: ssssergey
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/rezervnoe-kopirovanie/192517
Ссылки в тексте:
[1] вот здесь: https://www.google.com/settings/security/lesssecureapps
[2] Источник: https://habrahabr.ru/post/311018/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.