Резервное копирование баз PostgreSQL с помощью BASH (Bourne again shell)

15.06.21

База данных - Архивирование (backup)

Исходный текст скрипта с алгоритмом формирования резервной копии баз(ы) 1С, развернутой на СУБД PostgreSQL, без необходимости отключения пользователей (то есть непосредственно при работе самих пользователей).

   Скрипт предназначен для запуска на ОС Ubuntu. Запуск скрипта производится по регламенту, благодаря утилите nnCrone (cronetab).

Можно настроить расписание на запуск обработки раз в 12 часов

0 */12 * * * /bin/bash /home/user/backups/backup-onec.sh

 

Для полноценного функционирования необходима установка пакетов: sendEmail, pigz, pg_dump (postgresql-client).

 

План выполнения скрипта  

1. Получение списка требуемых баз

2. Формирование резервных копий благодаря самой PostgreSQL

3. Формирования архива gZip

3.1. Удаление старых копий.

4. Добавление записи после выполнения резервной копии в лог файл на новый файл резервной копии

5. Отправление на эл. почту письма с исходными данными по имеющимся выполненным резервным копиям

 

#!/bin/sh

#// Данный скрипт предназначен для формирования резервного копирования баз postgres 
#// с отправкой уведомления об этом на электронную почту
#//
#// This script is designed to create a backup of postgre and
#// and send notification of this to e-mail

#/////////////   Устанавливаем дату и другие реквизиты  //////////////////////////
DATA=`date +"%Y-%m-%d_%H-%M"`
PATHCORE=/home/user/backups
BACKUPRES=$PATHCORE/backupres.log
FORBODY=$PATHCORE/backupres_log.txt
#// 1 МБ
n=1048576 
#// Перечисление наименование баз перечислены через '\n'
#// Enumeration of database name are listed through '\n'
LISTBASE=$'listOne\nlistTwo\nlistThree\nlistFour\nlistFive'

#////////////  Бэкапим базу данных base1c и сразу сжимаем /////////////////////////
while read -r line; do

        #проверить наличие папки
        if [ -d "$line" ]
        then
        #       echo "Check folder - $line succesfully!"
        /usr/bin/pg_dump -U postgres -c $line | pigz > $PATHCORE/$line/$DATA-$line.dump.gz
        else
        #       echo "Folder $1 not exist. Create..."
        mkdir -p $PATHCORE/$line
        /usr/bin/pg_dump -U postgres -c $line | pigz > $PATHCORE/$line/$DATA-$line.dump.gz
        fi

#//////////////////////////   delete old files  ////////////////////////////////////
oldfile=`ls -1rt $PATHCORE/$line | head -1`
path=$PATHCORE/$line
colfile=`ls $PATHCORE/$line/ | wc -l`
if [ $colfile -gt 4 ]
then
rm $path/$oldfile
fi
find $path -type f -mtime +30 -exec rm -f {} \;

done <<< "$LISTBASE"

#/////////////////////////////   logging file backup //////////////////////////////
# Записываем информацию в лог с секундами
echo " \n  " >> $BACKUPRES
echo " \n  " >> $FORBODY

echo "Start backup base1c from `date +"%Y-%m-%d_%H-%M-%S"`\n  " >> $BACKUPRES
echo "Start backup base1c from `date +"%Y-%m-%d_%H-%M-%S"`\n  " >> $FORBODY

echo "One es databases backed up as scheduled \n  " >> $BACKUPRES
echo "One es databases backed up as scheduled \n  " >> $FORBODY

#transition name base postrgress
echo " \n  " >> $BACKUPRES
echo " \n  " >> $FORBODY

while read -r linee; do
for file in `find $PATHCORE/$linee/ -type f`
do
sum=`stat --printf="%s" $file`
result=`LC_NUMERIC="en_US.UTF-8" printf %.2fMb $(echo "$sum/$n" | bc -l)`
shortfile=`basename $file`
   echo  $shortfile "  " $result "\n  " >> $BACKUPRES
   echo  $shortfile "  " $result "\n  " >> $FORBODY
done

echo " \n  " >> $BACKUPRES
echo " \n  " >> $FORBODY
done <<< "$LISTBASE"

echo " end list\n  " >> $BACKUPRES
echo " end list\n  " >> $FORBODY

#///////////////////////////////  sending letter  ///////////////////////////////////

# Будет отображаться "От кого"
FROM=noreply@mail.ru
# Кому
MAILTO=technical@mail.ru
# Тема письма
NAME="postgres backup onec a scheduled operation serv"
# Тело письма
BODY=`cat $FORBODY`

SMTPSERVER=smtp.mail.ru
# Логин и ... от учетной записи
SMTPLOGIN=noreply@mail.ru
SMTPPASS=passemail

# Отправляем письмо
/usr/bin/sendEmail -f $FROM -t $MAILTO -o message-charset=utf-8  -u $NAME -m $BODY -s $SMTPSERVER -o tls=yes -xu $SMTPLOGIN -xp $SMTPPASS
echo " " > $FORBODY     

 

 

  Для экономии места на стороне сервера количество резервных копий ограничивается 4-мя последними копиями. То есть после создания копии последняя по дате копия будет удалена.

 

 

BASH Linux Ubuntu backup PosgreSQL

См. также

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    72787    625    45    

84

Архивирование (backup) Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Программа позволяет выполнять автоматическое создание копий файловых и серверных информационных баз 1С Предприятие 8 и размещение копий в облаке Яндекс.Диск, локальном или сетевом ресурсе.

1200 руб.

03.09.2014    15703    21    6    

27

Архивирование (backup) Администрирование СУБД Системный администратор Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    9423    n_mezentsev    15    

27

Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной инструкции будет описано, как с помощью pgAdmin, bat-файлов и планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

07.10.2022    28591    sapervodichka    37    

147

Архивирование (backup) Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Захотелось клиентам выгрузку архива баз, и выгрузку в дт, готовые скрипты с сети не заработали. Может, кому-то поможет. Релиз 8.3.18.1741.

1 стартмани

25.08.2022    5731    3    Gnom-Gluck    6    

7

Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Абонемент ($m)

Небольшая утилита для копирования файловых баз данных 1С.

1 стартмани

02.06.2022    4689    3    Giblarium    12    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1324 15.06.21 18:38 Сейчас в теме
Добавить выкладку на внешний ресурс с помощью rclone например + ping на healthcheck при полном успешном выполнении.
2. creatermc 27 15.06.21 18:42 Сейчас в теме
(1)
Добавить выкладку на внешний ресурс с помощью rclone например + ping на healthcheck при полном успешном выполнении.

А мысль хорошая, ок, возьму на заметку
3. eternity13 17.06.21 14:29 Сейчас в теме
проверки целостности созданного бэкапа еще не хватает.
например, путем развертывания его в копию базы.
4. yermak 51 24.08.21 09:50 Сейчас в теме
еще нужно таблицу config в отдельный binary-файл выгружать, т.к. иногда в ней есть поля больше 1Гб
5. vshish 156 17.03.22 10:02 Сейчас в теме
Скриптов бэкапа 100500, а скриптов восстановления нет.

у меня всего 2 базы. Делал их бэкапы, а как коснулось, ЗУП восстановился, а Бухия нет. Все ей чего-то не хватало


Может ты добавишь еще пример скрипта, которым восстанавливать эти архивы.

А то в критический момент каждая минута дорога.
6. user1852275 28.09.22 17:45 Сейчас в теме
Такой вопрос:
pg_dump не осуществляет бекапирование Tablespaces и Roles.
- Будет ли корректен рестор таких файлов дампа в базу в другом месте?
- Будет ли корректен рестор таких файлов дампа в базу на этом же сервере?
7. Kerim09 19 27.03.23 01:10 Сейчас в теме
Не отрабатывает.
# Отправляем письмо
/usr/bin/sendEmail -f $FROM -t $MAILTO -o message-charset=utf-8  -u $NAME -m $BODY -s $SMTPSERVER -o tls=yes -xu $SMTPLOGIN -xp $SMTPPASS
echo " " > $FORBODY  


Заменил. И в конфиге sendEmail заменил стандартный порт на 465. Все почтовики уже давно не пользуются 25 портом.
echo "SendEmail" | sendemail  -l /home/ensol/EmailLog/email.log -f $FROM -t $MAILTO -o message-charset=utf-8 -o message-content-type=html  -u $NAME -m $BODY -s $SMTPSERVER -o tls=yes -xu $SMTPLOGIN -xp $SMTPPASS 
echo " " > $FORBODY     


В остальном спасибо за готовый скрипт.
8. Kerim09 19 28.03.23 15:07 Сейчас в теме
(7) Ошибся скрипт работает. Проблема в самих провайдерах почты была. Обращайте внимание в сервисах mail.ru yandex.ru google.com авторизация не по основному паролю, а по токен-паролю для приложений.
Оставьте свое сообщение