Эта короткая статья поможет вам настроить автоматическое создание бэкапов вашей базы PostgreSQL с помощью утилиты pg_basebackup.
На сервере, где размещена БД
Для работы нужно на сервере, где находится база:
Создать пользователя 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 комментариев