[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 "+%Y-%m-%d") 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 > $pathB/pgsql-base_$(date "+%Y-%m-%d_%H").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 с разбежкой по времени достаточной, чтобы на исходном сервере успевал создаваться дамп базы.