Резервное копирование баз 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

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

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

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    42711    10    24    

38

BackUPv8 - система резервного копирования баз 1С

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

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

1200 руб.

03.09.2014    14872    15    6    

19

Автоматическое резервное копирование любой клиент-серверной базы 1С в формате DT с удалением сеансов, архивацией, изменением расширения (8.3.14+, расширение)

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

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

6000 руб.

06.11.2012    70385    622    44    

80

Резервное копирование журнала транзакций, наконец-то!

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

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

04.12.2023    6450    n_mezentsev    15    

27

Резервное копирование и восстановление 1С баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика

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

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

07.10.2022    20951    sapervodichka    36    

143

Архивирование базы в dt и дамп postgres

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

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

1 стартмани

25.08.2022    4853    2    Gnom-Gluck    6    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1296 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 151 17.03.22 10:02 Сейчас в теме
Скриптов бэкапа 100500, а скриптов восстановления нет.

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


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

А то в критический момент каждая минута дорога.
6. user1852275 28.09.22 17:45 Сейчас в теме
Такой вопрос:
pg_dump не осуществляет бекапирование Tablespaces и Roles.
- Будет ли корректен рестор таких файлов дампа в базу в другом месте?
- Будет ли корректен рестор таких файлов дампа в базу на этом же сервере?
7. Kerim09 18 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 18 28.03.23 15:07 Сейчас в теме
(7) Ошибся скрипт работает. Проблема в самих провайдерах почты была. Обращайте внимание в сервисах mail.ru yandex.ru google.com авторизация не по основному паролю, а по токен-паролю для приложений.
Оставьте свое сообщение