Если у тебя PostgreSQL крутится без бэкапов — считай, что ты играешь в рулетку. Тут коротко: как настроить pg_basebackup и cron, чтобы база каждый день сама сохранялась и старье удалялось без твоего участия.
На сервере, где размещена БД
Для работы нужно на сервере, где находится база:
Создать пользователя backuper:
sudo -u postgres createuser -U postgres backuper -P -c 5 --replicationОтредактировать конфиг:
sudo nano /etc/postgresql/12/main/pg_hba.confДобавить:
host replication all IP_СЕРВЕРА/32 trustГде вы указываете IP сервера, где будете хранить бэкапы.
Примечание: trust - делает соединение с указанного ip доверенным и позволяет войти под backuper. Можно использовать md5, тогда нужно настроить доступ с паролем в .pgpass https://www.postgresql.org/docs/9.2/libpq-pgpass.html
Отредактировать конфиг:
sudo nano /etc/postgresql/12/main/postgresql.confДобавить:
listen_addresses = '*'
wal_keep_segments = 64Перезагрузить postgresql:
sudo service postgresql restartСервер, где будут храниться бэкапы
Для начала, необходимо чтобы на сервере где будут храниться бэкапы была установлена точно такая же версия PostgreSQL, которая используется в вашем проекте.
Затем следует настроить cron:
1 1 * * * pg_basebackup -F t -h хост_вашего_проекта -p 5432 -U backuper -X f -D ~/backup/project-prod/$(date +\%d-\%b-\%Y) -z > ~/backup.log
1 1 * * * find /var/lib/postgresql/backup/project-prod/ -maxdepth 1 -mtime +4 -exec rm -rf {} \;Первая команда создает бэкап, вторая удаляет старые ненужные бекапы. В данном примере, оставляются только 4 последних бэкапа.
Как восстановить бекап
- На сервере бекапов скопировать бекап на продовый (или иной) сервер:
scp /var/lib/postgresql/backup/project-prod/15-Sep-2022/base.tar.gz www-php@[ip адрес]:/tmp- Распаковать архив:
gunzip /tmp/base.tar.gz- Остановить postgres:
sudo service postgresql stop- Проверить, что действительно остановлен:
systemctl status postgresql.service- Подключить под postgres пользователем:
sudo su - postgres- Переименовить каталог или сделать куда-нибудь копию:
/var/lib/postgresql/12/main- Заменить этот каталог данными из бекапа:
tar -xf /tmp/base.tar -C /var/lib/postgresql/12/main- Запустить postgres:
sudo service postgresql restart- Проверить статус:
systemctl status postgresql.service
0 комментариев