Скрипт для переноса базы PostgreSQL с одного сервера на другой.

[Disclamer]

Должен предупредить, что данная заметка является документированием текущей ситуации, а не руководством к действию… Всё, что вы делаете, вы делаете на свой страх и риск…

Прилетела новая задачка — разработчикам понадобилось проводить анализ по ночам на отдельном сервере и для этого нужно еженощно делать дамп базы на одном сервере (в облаке) и разворачивать его на другом (локально). Для этой задачи были написаны простые скрипты — на исходном сервере по крону делается дамп, а на целевом сервере по крону подключаемся к исходному серверу, через ssh забираем дамп базы, распаковываем его и восстанавливаем базу…

Скрипт для исходного сервера:

#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

database=basename
BACKUP_HOST_NAME=<code>hostname</code>
TYPE_BACKUP=daily
pathA=/opt/backups/$BACKUP_HOST_NAME/$TYPE_BACKUP
pathB=/opt/backups/$BACKUP_HOST_NAME/$TYPE_BACKUP/$(date &quot;+%Y-%m-%d&quot;)
FILE_TIME_STAMP=<code>date '+%Y_%m_%d_%H'</code>
#mkdir -p $pathB
find $pathA -mtime +8 -exec rm {} \; #удаляем старые архивы
sudo -u postgres pg_dump -Fc $database | gzip &gt; $pathB/pgsql-base_$(date &quot;+%Y-%m-%d_%H&quot;).sql.gz
rsync -avh --delete $pathA /mnt/backups/$BACKUP_HOST_NAME #перемещаем на примонтированный том

Скрипт для целевого сервера (для подключения к исходному серверу устанавливаем sshpass):

#!/bin/sh 
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

database=basename
backupbase=pgsql-base
restorepath=/opt/restore
find $restorepath -mtime +5 -exec rm {} \; #удаляем старые архивы
sshpass -p 'password' scp -P 123456 user@192.168.181.154:/var/nfs/Srv1/daily/$(date "+%Y-%m-%d")/$backupbase_$(date "+%Y-%m-%d_%H").sql.gz $restorepath
gunzip -c $restorepath/$backupbase_$(date "+%Y-%m-%d_%H").sql.gz > /opt/restore/$backupbase_$(date "+%Y-%m-%d_%H").sql #распаковываем архив
sudo -u postgres pg_restore -c -d $database < /opt/restore/$backupbase_$(date "+%Y-%m-%d_%H").sql #разворачиваем базу

Запускаются оба скрипта через crontab с разбежкой по времени достаточной, чтобы на исходном сервере успевал создаваться дамп базы.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *