Резервное копирование баз 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 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

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

12000 руб.

19.02.2025    769    1    0    

1

Архивирование (backup) Системный администратор 1С v8.3 Бесплатно (free)

Предлагаю Вашему вниманию 3 скрипта на bash (sh) для архивирования (backup) типовых конфигураций на Linux средствами 1С и Postgres. Перед запуском корректно заполните раздел "Параметры" в соответствии с Вашими настройками.

20.01.2025    1501    Prelude    5    

11

Архивирование (backup) 1С v8.3 1С:Управление нашей фирмой 3.0 Платные (руб)

Расширение поможет настроить резервное копирование баз SQL в стандартный файл выгрузки баз 1С (*.dt).

2400 руб.

27.08.2024    2148    1    6    

2

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Программист 1С v8.3 Бесплатно (free)

Бэкап в Postgres состоит из набора граблей, которые нужно обойти для успешного восстановления. Они заложены в самых неожиданных местах от предмета резервного копирования (база или кластер) до структуры каталогов. Один неверный шаг и восстановление будет невозможным. Почему нельзя было сделать проще, как в MS SQL или Oracle? Почему бэкап в Postgres оставляет впечатление чьей-то лабораторной работы? Статья адресована прежде всего специалистам 1С, избалованным комфортом в MS SQL, в суровых буднях импортозамещения на Postgres.

13.08.2024    5203    1CUnlimited    9    

6

Инструменты администратора БД Архивирование (backup) Системный администратор Программист Пользователь 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Обработка для "обновления" своей тестовой базы из резервной копии рабочей базы без помощи админов.

1 стартмани

21.05.2024    2853    13    baidinden    4    

8

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

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

04.12.2023    13454    n_mezentsev    15    

27

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

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

07.10.2022    39690    sapervodichka    38    

151
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1346 15.06.21 18:38 Сейчас в теме
Добавить выкладку на внешний ресурс с помощью rclone например + ping на healthcheck при полном успешном выполнении.
2. creatermc 28 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 161 17.03.22 10:02 Сейчас в теме
Скриптов бэкапа 100500, а скриптов восстановления нет.

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


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

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