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

15.01.20

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

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

Скачать файлы

Наименование Файл Версия Размер
Скрипт (bash) автоматической ежедневной выгрузки баз Postgres на ftp-сервер. + Скрипт восстановления
.rar 3,00Kb
18
.rar 3,00Kb 18 Скачать
Только скрипт восстановления.
.sh 1,45Kb
4
.sh 1,45Kb 4 Скачать

Всем привет. Может кому пригодиться 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

См. также

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

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

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

19200 руб.

15.05.2017    42521    10    24    

38

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

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

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

1200 руб.

03.09.2014    14732    13    6    

18

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

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

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

04.12.2023    5869    n_mezentsev    15    

24

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

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

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

07.10.2022    19820    sapervodichka    36    

142

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

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

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

1 стартмани

25.08.2022    4716    2    Gnom-Gluck    6    

6

Утилита копирования баз данных 1С

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

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

1 стартмани

02.06.2022    4236    3    Giblarium    12    

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

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

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

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

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

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

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


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

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


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

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

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

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

Готово.


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

DROP DATABASE
CREATE DATABASE

а

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

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