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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Архивирование (backup) Инструменты администратора БД 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

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

7320 руб.

06.11.2012    80383    635    45    

94

Архивирование (backup) Обновление 1С Системный администратор Разработчик 1С 8.3 Бесплатно (free)

Платформа 8.3.17, MS SQL Server: обновление конфигурации падает через 15 секунд на этапе обновления предопределённых данных, и конфигуратор при каждом входе предлагает только повторить. Проверьте у себя, когда сделана последняя полная копия базы: у нас её не было почти месяц. Разбор по минутам: что не помогло (перезапуск агента сервера 1С, перезагрузка, пакетный /UpdateDBCfg, три совета со стороны) и почему. Как ibcmd достал .dt из базы, которая не открывается, и как новую базу подставили под старым именем в кластере 1С через rac, не трогая пользователей. Простой 57 минут, потерь данных нет. Отдельно ошибки ИИ-агента Claude, который работал на сервере, и порядок действий на случай, если это случилось у вас.

03.11.2026    461    nedomolkov.ivan    11    

5

Архивирование (backup) Инструменты администратора БД Системный администратор Разработчик 1С 8.3 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Абонемент ($m)

Полностью автоматизированная внешняя обработка для администрирования 1С: блокировка/разблокировка ИБ, массовое завершение сеансов, резервное копирование и восстановление из .dt, выгрузка/загрузка конфигурации (.cf), пакетная работа с расширениями (.cfe) и дополнительными обработками – всё через удобную форму без ручных запусков конфигуратора и консоли кластера

1 стартмани

21.01.2026    6499    66    war41k    0    

18

Архивирование (backup) Групповая разработка (Git, хранилище) Системный администратор Разработчик Бесплатно (free)

Как дать возможность каждому разработчику 1С вести разработку, тестирование и оптимизацию на собственной полноразмерной копии базы и при этом не тратить миллиарды рублей и тысячи часов на развертывание тестового окружения, а так же экономить дисковое пространство? Расскажем о том, как с помощью инструмента Database Lab получать полноразмерные копии базы 1C на СУБД PostgreSQL за считанные секунды (даже в случае использования многотерабайтных баз).

15.12.2025    14186    nasonkin    19    

31

Архивирование (backup) Учет документов Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

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

12200 руб.

19.02.2025    2939    3    0    

3

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

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

20.01.2025    5972    Prelude    5    

12

Архивирование (backup) 1С 8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

Резервные копии базы 1С без завершения сеансов: .dt, файл базы, PostgreSQL, MS SQL, своя команда. Расписание, профили, ротация, ZIP, FTP, журнал и письмо об ошибке. Платформа 8.3+ (кроме 8.2), любая конфигурация с БСП. Подключение за 5 минут.

5000 руб.

27.08.2024    4135    1    6    

2

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Разработчик 1С:Предприятие 8 Бесплатно (free)

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

13.08.2024    10676    1CUnlimited    11    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1409 15.06.21 18:38 Сейчас в теме
Добавить выкладку на внешний ресурс с помощью rclone например + ping на healthcheck при полном успешном выполнении.
2. creatermc 30 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 166 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 авторизация не по основному паролю, а по токен-паролю для приложений.
Для отправки сообщения требуется регистрация/авторизация