Скрипт (bash) автоматической ежедневной выгрузки баз Postgres на ftp-сервер + Скрипт восстановления

15.01.20

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

Скрипт автоматически выгружает базы Postgres и выкладывает на ftp-сервер. Сохраняет базы по дням недели, что позволяет экономить место на диске. Добавлен скрипт для восстановления базы из архива.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Скрипт (bash) автоматической ежедневной выгрузки баз Postgres на ftp-сервер. + Скрипт восстановления
.rar 3,00Kb
18
18 Скачать (1 SM) Купить за 1 850 руб.
Только скрипт восстановления.
.sh 1,45Kb
5
5 Скачать (1 SM) Купить за 1 850 руб.

Всем привет. Может кому пригодиться bash-скрипт для автоматической выгрузки баз postgres по расписанию.

Архив содержит несколько файлов:

  • access.setting (настройки доступа к ресурсам)
  • backup.log (файл лога)
  • bases.list (список баз)
  • pgsql-backup.sh (скрипт выгрузки)
  • pgsql-backup-onlyday.sh (скрипт выгрузки)
  • +pgsql-restore.sh (скрипт восстановления)

Итак:

access.setting  содержит настройки доступа к Postgres, ftp, а так же адреса серверов, подробное описание есть в файле.

bases.list Список баз, выгружаемых скриптом. Каждая база в новой строке. Если базу выгружать не нужно - закомментируйте символом "#" или удалите строку. Важно чтобы последняя строчка оставалась пустой или закомментированной.

backup.log сюда сохраняется информация о выгрузке баз или возникающих ошибках

pgsql-backup.sh собственно сам скрипт.

Поместите содержимое архива в /home/basebackup или в любой другой каталог, но в таком случае вам необходимо поменять значение переменной PathToDir  на новый путь. 

Скрипт делает дамп базы, затем подключается к ftp-серверу и выгружает полученный дамп в папку указанную в настройках.

Скрипт выгружает базы по дням недели: пн, вт, ср и т.д. Соответственно бэкап базы храниться 7 дней, база выгруженная в понедельник будет перезаписана в следующий понедельник, это позволяет экономить место на диске.

Вторая часть скрипта делает выгрузку на ftp-сервер в первый день месяца в формате дата.namebase и эти бэкапы перезаписаны не будут.

В архиве есть файл pgsql-backup-onlyday.sh который выгружает ежедневно базы в формате дата.namebase, эти бэкапы перезаписываться не будут, но в таком случае вам необходимо самому следить за наличием свободного места на диске.

Скрипт можно запустить вручную или по расписанию с помощью cron.

Чтобы скрипт запускался автоматически выполните команду crontab -e, и в открывшемся файле добавьте строку:

0 0 * * * /home/basebackup/pgsql-backup.sh >>/home/basebackup/backup.log 2>&1

Сохраните файл и все готово.

Cron будет запускать скрипт ежедневно в 00:00.(если нужно другое время почитайте параметры настройки cron)

Если вы меняли расположение файлов то укажите путь к файлам вместо выделенного красным.

P.S.: Скрипт не обязательно запускать на сервере с postgres, можно, в принципе, на любом компе(я проверял на виртуалке с linux mint), но, в этом случае, на комп необходимо доустановить пакет "postgresql-client", можно командой "sudo apt-get install postgresql-client", но в таком случае будет ругаться на несовместимость версий, лучше устанавливать "postgresql-client" из deb пакета postgres с сайта 1с.

UPD.

В архив добавил файл pgsql-restore.sh

позволяет восстановить базу из созданных архивов.

Итак:

Первое: из комментариев про бинарный режим:

Второе: Восстанавливает, специально проверил, и на centos (у меня на ней крутится postgres), и на ubuntu server 16.04 и на Linux Mint. Используйте скрипт из архива.

Третье: раз два см это неподъемная сумма для "спецов" из комментариев, пусть будет 1 см.

Четвертое: по поводу строки "date...." если задать через переменную для удобочитаемости, тогда в лог будет писать дата/время одно и тоже, когда была инициализирована переменная, а мне надо было чтобы время было на каждую операцию текущее, для оценки времени работы.

Пятое: из комментариев "у многих клиенты будут глубоко за NAT", зачем запускать такие вещи на клиентах за NAT не совсем понятно. Лучше всего запускайте скрипт cron`ом на самой машние где крутится Postgres.

Ну и на конец: Работа скрипта по восстановлению:

Запустите скрипт. По тем же настройкам (из файла access.setting), что описаны выше, произойдет подключение к ftp и выведется список файлов. Введите имя файла из которого следует восстановить базу.

Затем скрипт спросит создать новую базу или загрузить в старую (введите соответственно "new" или "old").

Если выбрали "old" - появится список баз на сервере.

Введите имя базы в которую необходимо залить бэкап.

Готово.

UPD2. 

Благодарю за подсказку насчет "Акела промахнулся", поэтому добавил еще одно подтверждение пользователем загрузки базы.

Также указал явное включение пассивного и бинарного режимов.

bash скрипт postgres ftp dump бэкап cron

См. также

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

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

6000 руб.

06.11.2012    73834    629    45    

88

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

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

1200 руб.

03.09.2014    15999    22    6    

28

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

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

2400 руб.

27.08.2024    1557    1    6    

2

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

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

20.01.2025    551    Prelude    1    

5

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

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

13.08.2024    3550    1CUnlimited    9    

6

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

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

1 стартмани

21.05.2024    2353    11    baidinden    4    

8

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

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

04.12.2023    10639    n_mezentsev    15    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3098 16.01.20 13:33 Сейчас в теме
Как-то (в детстве) писал статейку со скриптом - где-то тут: https://infostart.ru/public/1051601/

Вдруг кому интересно, что там за слова после "DAY=...", а двух стартманей нет... )))
Isonic; iulyus; oldcopy; BigB; lmnlmn; +5 Ответить
2. oldcopy 174 17.01.20 02:13 Сейчас в теме
Как-то измельчал народ, везде денег хотят или стартманей. А я, как дурачок, уже 10 лет веду блог, где бесплатно разжевываю от и до, да и здесь тоже бесплатно публикуюсь... Видимо что-то я пропустил в этой жизни.
5. starik-2005 3098 17.01.20 12:31 Сейчас в теме
(2)
Как-то измельчал народ, везде денег хотят или стартманей.
Вам, ИТ-директорам, не понять обычных 1С-негов.
3. Mallok 84 17.01.20 07:36 Сейчас в теме
Как вы заколебали тут умничать, ведете блог, пишите статьи...так и пишите и ведите, с хрена ли вы тут себя рекламируете таких умных???? Я выкладываю ГОТОВОЕ решение, а не статью из разряда "как нарисовать сову". Дорого 2sm?, вот интересно, а сколько бы ты, такой красивый, в реале взял бы с компании, обратившейся к тебе настроить бэкап???
4. starik-2005 3098 17.01.20 12:28 Сейчас в теме
(3)
а сколько бы ты, такой красивый, в реале взял бы с компании, обратившейся к тебе настроить бэкап???
Так это не царское дело - пусть плебеи занимаются. Ну и не раскрыта тема восстановления, которая раскрыта в ссылке в (1), а без восстановления зачем бэкап вообще нужен?
6. oldcopy 174 18.01.20 18:24 Сейчас в теме
(3) О как бомбануло, не идет гешефт? Бывает...

Я вот стесняюсь спросить, а чем ваше "готовое" решение отличается от "нарисованной совы?", я даже знаю что там у вас написано и без двух стартманей, так как придумать что-то принципиально новое тут затруднительно. Разве что ваше "ноу-хау" - это раскидать настройки по файлам.

Вполне можно было бы расписать ваше "ноу-хау" в виде статьи, точно также выложив скрипты за стартмани, я думаю, что многие бы скачали, чисто для экономии времени.
7. starik-2005 3098 20.01.20 11:02 Сейчас в теме
(6) лучше вообще статью - за 50 голосов дают 30 стартманей, за 100 - еще 20. Зато сразу. Хотя у меня есть обработка просмотра структуры СУБД из одной строки кода - ее уже 35 раз скачали за 1 см, но я там честно говорю, что одна строка кода всего и если не жалко - качайте.
8. oldcopy 174 20.01.20 12:03 Сейчас в теме
Решил я все таки посмотреть "готовое" решение и стал третьим, расставшимся с двумя стартманями. И сразу вопрос к автору: вы восстанавливать свои архивы пробовали? Если нет, то попробуйте, возможно вас ждут чудесные открытия. Потому что архивы следует передавать в бинарном режиме, переключения в который я не увидел.

Ну и работа с FTP в активном режиме тоже очень сомнительное решение, у многих клиенты будут глубоко за NAT (а то и не за одним) и работать данный скрипт у них не будет.

Читабельность тоже оставляет желать лучшего, можно же было $(date +%Y/%m/%d_%H:%M:%S) вынести в переменную, а не писать через строку.

В общем и целом на 2 стартмани не тянет и на "готовое" тоже. Как шаблон для доработки - сойдет.
9. oldcopy 174 21.01.20 08:28 Сейчас в теме
Первое: из комментариев про бинарный режим:


Это вам повезло, что FTP-сервер оказался "умным", определил что вы ему передаете и сам включил бинарный режим. Но не у всех такое "везение", поэтому бинарный режим при передаче архивов надо включать явно.

из комментариев "у многих клиенты будут глубоко за NAT", зачем запускать такие вещи на клиентах за NAT не совсем понятно


Уже на этом можно бы было и закончить. Глубоко на NAT может стоять именно ваш сервер, тот самый на котором Postgres и где будет крутиться данный скрипт. А FTP-сервер будет где-то в этих самых интернетах. В активном режиме такая связка работать не будет. В пассивном - будет, причем откуда угодно.

Затем скрипт спросит создать новую базу или загрузить в старую (введите соответственно "new" или "old").

Если выбрали "old" - появится список баз на сервере.

Введите имя базы в которую необходимо залить бэкап.

Готово.


А потом высянится, что "Акела промахнулся". При заливке в существующую базу лучше делать не

DROP DATABASE
CREATE DATABASE

а

ALTER DATABASE имя RENAME TO новое_имя

Чтобы оставалась живая копия. Она карман не тянет, если что - всегда можно удалить руками.
Оставьте свое сообщение