Скрипт (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 Управляемые формы Конфигурации 1cv8 Платные (руб)

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

6000 руб.

06.11.2012    72788    625    45    

84

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

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

1200 руб.

03.09.2014    15705    21    6    

27

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

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

04.12.2023    9426    n_mezentsev    15    

27

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

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

07.10.2022    28598    sapervodichka    37    

147

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

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

1 стартмани

25.08.2022    5732    3    Gnom-Gluck    6    

7

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

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

1 стартмани

02.06.2022    4689    3    Giblarium    12    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3087 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 3087 17.01.20 12:31 Сейчас в теме
(2)
Как-то измельчал народ, везде денег хотят или стартманей.
Вам, ИТ-директорам, не понять обычных 1С-негов.
3. Mallok 82 17.01.20 07:36 Сейчас в теме
Как вы заколебали тут умничать, ведете блог, пишите статьи...так и пишите и ведите, с хрена ли вы тут себя рекламируете таких умных???? Я выкладываю ГОТОВОЕ решение, а не статью из разряда "как нарисовать сову". Дорого 2sm?, вот интересно, а сколько бы ты, такой красивый, в реале взял бы с компании, обратившейся к тебе настроить бэкап???
4. starik-2005 3087 17.01.20 12:28 Сейчас в теме
(3)
а сколько бы ты, такой красивый, в реале взял бы с компании, обратившейся к тебе настроить бэкап???
Так это не царское дело - пусть плебеи занимаются. Ну и не раскрыта тема восстановления, которая раскрыта в ссылке в (1), а без восстановления зачем бэкап вообще нужен?
6. oldcopy 174 18.01.20 18:24 Сейчас в теме
(3) О как бомбануло, не идет гешефт? Бывает...

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

Вполне можно было бы расписать ваше "ноу-хау" в виде статьи, точно также выложив скрипты за стартмани, я думаю, что многие бы скачали, чисто для экономии времени.
7. starik-2005 3087 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 новое_имя

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