🔒⚙️ Как разделить корпоративную сеть на VLAN и повысить безопасность данных?
Приглашаем на открытый вебинар «VLAN и маршрутизация: почему без них не обойтись в любой компании» 23 июля в 20:00 МСК.
На вебинаре вы узнаете:
- Зачем бизнесу нужно разделение сети на VLAN?
- Как маршрутизация между VLAN помогает контролировать трафик и защищать данные?
- Как настроить Access и Trunk порты на оборудовании Cisco?
После вебинара вы сможете настроить VLAN, изолировать гостевые сети, создавать и конфигурировать порты для подключения и маршрутизации, а главное — освоите базовый навык, необходимый каждому сетевому инженеру.
Урок проходит в преддверии старта курса «Network engineer. Basic».
👉 Регистрация для участия: https://clck.ru/3NBN36
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приглашаем на открытый вебинар «VLAN и маршрутизация: почему без них не обойтись в любой компании» 23 июля в 20:00 МСК.
На вебинаре вы узнаете:
- Зачем бизнесу нужно разделение сети на VLAN?
- Как маршрутизация между VLAN помогает контролировать трафик и защищать данные?
- Как настроить Access и Trunk порты на оборудовании Cisco?
После вебинара вы сможете настроить VLAN, изолировать гостевые сети, создавать и конфигурировать порты для подключения и маршрутизации, а главное — освоите базовый навык, необходимый каждому сетевому инженеру.
Урок проходит в преддверии старта курса «Network engineer. Basic».
👉 Регистрация для участия: https://clck.ru/3NBN36
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍13👎7
На прошлой неделе смотрел видео и читал статью про веб панель управления бэкапами PostgreSQL. А если точнее, то только бэкапами в виде дампов. Сразу понятно, что это инструмент для небольших баз данных. Большие базы дампами бэкапить неудобно, так как это, во-первых, может длиться непрогнозируемо долго, во-вторых, это всегда только полные бэкапы, а для больших баз хочется инкрементных копий.
Речь пойдёт о Postgresus. Основные возможности:
◽️Веб интерфейс для управления заданиями и отчётами
◽️Расписание бэкапов
◽️Сжатие, автоочистка старых бэкапов
◽️Хранение локально или в S3, Google Drive
◽️Уведомления по Email, Telegram
◽️Запускается в Docker Compose
По сути это замена самописным bash скриптам в кроне. Именно их я и использую для таких задач 🤖 Решил упростить себе задачу. Забегая вперёд, скажу, что эта панель реально заменяет эти скрипты, не более.
Postgresus состоит из двух Docker контейнеров: непосредственно сама панель и локальный экземпляр postgresql сервера для хранения собственных настроек. Запустить можно вручную из предложенного в репозитории файла
Скрипт ставит докер и стартует с этим же docker-compose.yml. Я вручную запустил. После запуска можно сразу идти в веб интерфейс на порт сервера 4005 и там всё настраивать. Не рекомендую запускать подобные вещи непосредственно на сервере с СУБД. Я сделал отдельную небольшую виртуалку и открыл для неё доступ к базам.
Дальнейшее управление осуществляется через веб интерфейс. Там всё максимально просто и наглядно:
1️⃣ Настраиваем хранилище для бэкапов. Я использовал локальную директорию. После тестов примонтирую туда отдельно большой диск.
2️⃣ Добавляем приёмник для уведомлений. Telegram сразу заработал, нужно указать токен своего бота и ID чата. С почтой не получилось, так как отправка по умолчанию настраивается по TLS, а у меня там локальный сервер стоял без него. Перенастраивать не захотелось. Жаль, что автор не оставил такой возможности.
3️⃣ Добавляем подключение к базе данных и настраиваем параметры её бэкапа.
Бэкап выполняется не особо быстро. Скриптами локально я базу на 5ГБ бэкаплю секунд 30. Из соседней виртуалки с помощью Postgresus бэкапится 12 минут. В целом мне некритично, так как для этого сервера бэкапы выполняются раз в сутки по ночам. Времени достаточно, хотя с такой скоростью это растянется часа на полтора.
Архивы хранятся локально в виде дампов со случайными именами вида
Восстановление возможно тут же через веб интерфейс, причём на любой сервер, а не только исходный. Это удобно для ручного тестирования бэкапов. Можно создать тестовый сервер и там периодически проверять дампы или выгружать их для каких-то других задач, не нагружая основной сервер.
В общем и целом панель нормальная. Для небольших серверов будет удобным решением в качестве замены самописных скриптов. Плюс, тут дополнительно работает мониторинг доступности баз данных и уведомления и для бэкапов, и для этого мониторинга. Сделано всё аккуратно и красиво. Посмотрим, как покажет себя в реальной эксплуатации. Мне возможно не будет удобным это решение, так как на скриптах я обычно сразу и на другие сервера передаю бэкапы, и формирую дневные, недельные, месячные наборы для долгосрочного хранения. На базе этой панели это делать неудобно. Возможно, останется как дополнительный инструмент, в котором можно быстро сделать бэкап и восстановить где-то в другом месте.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#postgresql #backup
Речь пойдёт о Postgresus. Основные возможности:
◽️Веб интерфейс для управления заданиями и отчётами
◽️Расписание бэкапов
◽️Сжатие, автоочистка старых бэкапов
◽️Хранение локально или в S3, Google Drive
◽️Уведомления по Email, Telegram
◽️Запускается в Docker Compose
По сути это замена самописным bash скриптам в кроне. Именно их я и использую для таких задач 🤖 Решил упростить себе задачу. Забегая вперёд, скажу, что эта панель реально заменяет эти скрипты, не более.
Postgresus состоит из двух Docker контейнеров: непосредственно сама панель и локальный экземпляр postgresql сервера для хранения собственных настроек. Запустить можно вручную из предложенного в репозитории файла
docker-compose.yml
, либо воспользоваться скриптом от разработчика:# curl -sSL https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/heads/main/install-postgresus.sh | bash
Скрипт ставит докер и стартует с этим же docker-compose.yml. Я вручную запустил. После запуска можно сразу идти в веб интерфейс на порт сервера 4005 и там всё настраивать. Не рекомендую запускать подобные вещи непосредственно на сервере с СУБД. Я сделал отдельную небольшую виртуалку и открыл для неё доступ к базам.
Дальнейшее управление осуществляется через веб интерфейс. Там всё максимально просто и наглядно:
Бэкап выполняется не особо быстро. Скриптами локально я базу на 5ГБ бэкаплю секунд 30. Из соседней виртуалки с помощью Postgresus бэкапится 12 минут. В целом мне некритично, так как для этого сервера бэкапы выполняются раз в сутки по ночам. Времени достаточно, хотя с такой скоростью это растянется часа на полтора.
Архивы хранятся локально в виде дампов со случайными именами вида
a8bc8814-c548-4f9a-ba0c-97d3b1e107fc
. Не очень удобно, если захочется куда-то дублировать их. Скачать дамп можно через веб интерфейс и вручную восстановить с помощью pg_restore
. Я заглянул внутрь дампа. Он отличается от того, что делаю я с помощью pg_dump
. Скорее всего используются какие-то дополнительные ключи. Я обычно делаю чистый дамп только данных.Восстановление возможно тут же через веб интерфейс, причём на любой сервер, а не только исходный. Это удобно для ручного тестирования бэкапов. Можно создать тестовый сервер и там периодически проверять дампы или выгружать их для каких-то других задач, не нагружая основной сервер.
В общем и целом панель нормальная. Для небольших серверов будет удобным решением в качестве замены самописных скриптов. Плюс, тут дополнительно работает мониторинг доступности баз данных и уведомления и для бэкапов, и для этого мониторинга. Сделано всё аккуратно и красиво. Посмотрим, как покажет себя в реальной эксплуатации. Мне возможно не будет удобным это решение, так как на скриптах я обычно сразу и на другие сервера передаю бэкапы, и формирую дневные, недельные, месячные наборы для долгосрочного хранения. На базе этой панели это делать неудобно. Возможно, останется как дополнительный инструмент, в котором можно быстро сделать бэкап и восстановить где-то в другом месте.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#postgresql #backup
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍80👎7
VMmanager теперь работает внутри кластера — как мастер-VM
Раньше управляющая платформа разворачивалась на отдельном сервере. Теперь — в виде обычной виртуальной машины внутри того же кластера, которым управляет. Это снижает нагрузку на железо и упрощает масштабирование.
Поддерживается автоматическое восстановление: при сбое мастер-VM переносится на другой узел благодаря связке vm-agent + HA-кластер. Управление ресурсами (CPU, RAM, диски) гибкое, без перезапуска.
Работает миграция ВМ между узлами без остановки. Все компоненты платформы и инфраструктуры — в единой среде.
Подробнее можете сами почитать тут.
Реклама, АО «Экзософт».
Раньше управляющая платформа разворачивалась на отдельном сервере. Теперь — в виде обычной виртуальной машины внутри того же кластера, которым управляет. Это снижает нагрузку на железо и упрощает масштабирование.
Поддерживается автоматическое восстановление: при сбое мастер-VM переносится на другой узел благодаря связке vm-agent + HA-кластер. Управление ресурсами (CPU, RAM, диски) гибкое, без перезапуска.
Работает миграция ВМ между узлами без остановки. Все компоненты платформы и инфраструктуры — в единой среде.
Подробнее можете сами почитать тут.
Реклама, АО «Экзософт».
👍18👎12
Вчера рассмотрел Postgresus - веб панель для бэкапов баз Postgresql. У неё есть очень близкий и более старый аналог – PG Back Web. Панели похожи по функциональности и архитектуре. Автор Postgresus наверняка знаком с ней, потому что многие вещи реализованы схожим образом. Но есть и отличия. Каждый, судя по всему, реализовал настройки и управление так, как ему казалось более удобным. Расскажу по порядку.
1️⃣ Установка выполняется так же, как и у Postgresus – готовый
2️⃣ В Pgbackweb сущности в виде баз данных и заданий для бэкапа разделены. Отдельно добавляется база, отдельно для неё создаётся задание для бэкапа. Соответственно, для одной и той же базы могут быть созданы разные задачи с бэкапом и параметрами хранения. В Postgresus настройки базы и бэкапа для неё объединены в одну сущность.
3️⃣ Создаваемый в Pgbackweb дамп тут же на лету жмётся в zip. А в самом архиве лежит чистый дамп в текстовом формате, который можно открыть, посмотреть, изменить. Создание дампа в Pgbackweb примерно в 2-2,5 раза дольше, чем у Postgresus. Последний жмёт средствами самого pg_dump, если я правильно понял из исходников, то есть использует ключи
К сожалению, обе панели не дают возможность самому задавать эти параметры. А иногда бывает нужно либо так, либо эдак. Например, если тебе важна скорость, то лучше жать встроенными средствами. Но из такого дампа потом неудобно извлекать отдельную таблицу, если она понадобится. А из текстового дампа это сделать очень просто. Лично я, когда создаю дампы баз данных, выгружаю их в обычном текстовом формате и жму сам с помощью pigz в многопоточном режиме. Получается и быстро, и удобно. Потом распаковал и делай с ним, что хочешь.
4️⃣ Pgbackweb предлагает сохранять бэкапы либо локально, либо в S3. Больше у неё ничего нет для хранения. Формат путей вида
5️⃣ Сохранённый дамп можно самому скачать и восстановить вручную, либо воспользоваться веб интерфейсом. Базу можно восстановить как в исходную, так и в другую, в том числе на другом сервере. Здесь возможности обеих панелей совпадают.
6️⃣ В качестве уведомлений Pgbackweb предлагает только вебхуки, что слабовато по сравнению с готовой интеграцией с Telegram, Email, Slack, Discord в Postgresus.
В общем и целом панели сильно похожи и выполняют одни и те же задачи. Разница в некоторых мелочах, которые кому-то могут быть критичны, кому-то нет. Мне лично больше понравилась Postgresus за её внешний вид и внутреннюю логику. Сжатые дампы делает намного быстрее, что уже на базах в 5-10 ГБ становится критично. Так как, к примеру, 15 минут против 35 для 10 ГБ – это существенная разница.
⇨🌐 Исходники / ▶️ Видеобзор
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#postgresql #backup
docker-compose.yaml
в репозитории для запуска двух контейнеров: сама веб панель и локальная Postgresql для сохранения настроек и состояния. Достаточно запустить docker compose и можно идти на порт 8085 сервера и пользоваться панелью. В консоли больше делать нечего.-Fc
(custom-format) -Z 6
(compression level). К сожалению, обе панели не дают возможность самому задавать эти параметры. А иногда бывает нужно либо так, либо эдак. Например, если тебе важна скорость, то лучше жать встроенными средствами. Но из такого дампа потом неудобно извлекать отдельную таблицу, если она понадобится. А из текстового дампа это сделать очень просто. Лично я, когда создаю дампы баз данных, выгружаю их в обычном текстовом формате и жму сам с помощью pigz в многопоточном режиме. Получается и быстро, и удобно. Потом распаковал и делай с ним, что хочешь.
/backups/dbase01/2025/07/21
. Это удобно, если захочется забирать готовые дампы куда-то ещё и складывать их в архивы по каким-то датам. В Postgresus такой возможности нет. Там ни в пути, ни в имени файла нет никаких временных меток и упоминания имени базы.В общем и целом панели сильно похожи и выполняют одни и те же задачи. Разница в некоторых мелочах, которые кому-то могут быть критичны, кому-то нет. Мне лично больше понравилась Postgresus за её внешний вид и внутреннюю логику. Сжатые дампы делает намного быстрее, что уже на базах в 5-10 ГБ становится критично. Так как, к примеру, 15 минут против 35 для 10 ГБ – это существенная разница.
⇨
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#postgresql #backup
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61👎3
Раз уж я рассмотрел панели для управления бэкапами (Postgresus и Pgbackweb) в виде дампов в Postgresql, было бы логично рассмотреть и вариант со своими велосипедами на bash. Поделюсь тем, что использую я.
Сначала полный текст скрипта для бэкапа:
Рассказываю, что тут происходит:
1️⃣ Завожу в переменную BASES список баз, которые мы будем бэкапить. Их можно указывать вручную, примерно так:
Можно использовать обратный подход. Бэкапить все базы, но вручную или по маске задавать исключения. Примерно так:
2️⃣ База дампится с помощью
3️⃣ В дампе проверяем наличие строки
Соответственно, если строки присутствуют, пишем в лог файл, что Backup is OK, если есть проблемы, то Backup is corrupted. Дальше этот файл забирает либо мониторинг, либо хранилка логов. И если они видят фразу corrupted, то срабатывает триггер.
4️⃣ Если с дампом всё в порядке, то он жмётся архиватором
Получается автоматическая максимально простая и эффективная схема работы. Я вчера добавлял базы в веб панель. Честно говоря, меня это утомило. Если баз 1-2, то не проблема. А 15 штук добавлять уже надоедает. Бывает и больше. Плюс, надо вручную следить за ними, добавлять, отключать ненужные и т.д. Так что панель вроде и выглядит удобно, но если баз много, то удобства уже сомнительные.
Дальше у меня работает ещё один простой скрипт, который забирает эти дампы на тестовый сервер, распаковывает и заливает в СУБД. Расскажу о нём в следующей заметке.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#postgresql #backup #script
Сначала полный текст скрипта для бэкапа:
#!/bin/bash
BASES=`/opt/pgpro/1c-16/bin/psql -U postgres -l | grep "_buh\|_zup" | awk '{print $1}'`
DATA=`date +"%Y-%m-%d_%H-%M"`
LOGDIR=/var/lib/pgpro/service_logs
BACKUPDIR=/var/lib/pgpro/backup
for i in ${BASES};
do
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup $i" >> $LOGDIR/backup.log
/opt/pgpro/1c-16/bin/pg_dump -U postgres $i > $BACKUPDIR/$DATA-$i.sql 2>> $LOGDIR/dump.log
BEGIN=`head -n 2 $BACKUPDIR/$DATA-$i.sql | grep ^'-- PostgreSQL database dump' | wc -l`
END=`tail -n 3 $BACKUPDIR/$DATA-$i.sql | grep ^'-- PostgreSQL database dump complete' | wc -l`
if [ "$BEGIN" == "1" ];then
if [ "$END" == "1" ];then
echo "Backup ${i} is OK" >> $LOGDIR/backup.log
/usr/bin/pigz -c $BACKUPDIR/$DATA-$i.sql > $BACKUPDIR/$DATA-$i.sql.gz
/usr/bin/rm $BACKUPDIR/$DATA-$i.sql
else
echo "Backup ${i} is corrupted" >> $LOGDIR/backup.log
fi
else
echo "Backup ${i} is corrupted" >> $LOGDIR/backup.log
fi
echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup $i" >> $LOGDIR/backup.log
echo "=========================================" >> $LOGDIR/backup.log
done
Рассказываю, что тут происходит:
BASES=("db01_zup" "db02_buh")
. Можно брать список всех баз. В данном случае на сервере я маркирую базы метками _buh
и _zup
в названиях баз, чтобы по ним делать выборку. Если базу не нужно бэкапить, то эта метка не ставится. Можно придумать любую свою метку, например _back
. Это позволяет автоматически бэкапить все нужные базы, не следя за их составом. Очень актуально, если создаёте и удаляете базы не вы, но вам нужны все бэкапы баз. Можно использовать обратный подход. Бэкапить все базы, но вручную или по маске задавать исключения. Примерно так:
/opt/pgpro/1c-15/bin/psql -U postgres -l | grep -wv 'template0\|template1\|test-base\|_test' | sed -e '1,3d' | head -n -2 | awk '{print $1}'`
pg_dump
без каких-либо дополнительных параметров. На выходе имеем обычный несжатый текстовый дамп.-- PostgreSQL database dump
в начале дампа и -- PostgreSQL database dump complete
в конце. Поэтому нам важно иметь дамп в текстовом формате. Если процесс снятия дампа прошёл без ошибок и в дампе присутствуют эти строки, то с большой долей вероятности с ним всё в порядке. Я ни разу не сталкивался с обратной ситуацией.Соответственно, если строки присутствуют, пишем в лог файл, что Backup is OK, если есть проблемы, то Backup is corrupted. Дальше этот файл забирает либо мониторинг, либо хранилка логов. И если они видят фразу corrupted, то срабатывает триггер.
pigz
. Он работает многопоточно всеми доступными ядрами процессора. Если не хотите нагружать так плотно сервер, то количество потоков можно ограничить ключами. Я обычно снимаю дампы ночью и жму на всю катушку, чтобы побыстрее завершилось. Дампы потом ещё передавать надо. Это уже отдельная процедура и запускается с сервера бэкапов. С самого сервера СУБД к бэкапам доступа нет. Получается автоматическая максимально простая и эффективная схема работы. Я вчера добавлял базы в веб панель. Честно говоря, меня это утомило. Если баз 1-2, то не проблема. А 15 штук добавлять уже надоедает. Бывает и больше. Плюс, надо вручную следить за ними, добавлять, отключать ненужные и т.д. Так что панель вроде и выглядит удобно, но если баз много, то удобства уже сомнительные.
Дальше у меня работает ещё один простой скрипт, который забирает эти дампы на тестовый сервер, распаковывает и заливает в СУБД. Расскажу о нём в следующей заметке.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#postgresql #backup #script
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍150👎3
Открытый практикум Linux by Rebrain: Следим за жизнью процессов в Linux
После регистрации мы отправим вам подарок! Вы сможете найти его в ответном письме.
👉Регистрация
Время проведения:
30 июля (среда) в 19:00 по МСК
Программа практикума:
▪️ Потребление ресурсов: top/htop, iotop и др.
▫️ Расход и структура памяти: valgrind, py-spy и др.
▪️ Системные вызовы: strace
▫️ Создание и операции с файлами: inotify
Кто ведёт?
Даниил Батурин — основатель проекта VyOS, системы для корпоративных и провайдерских маршрутизаторов с открытым исходным кодом.
Бесплатные практикумы по DevOps, Linux, Networks и Golang от REBRAIN каждую неделю. Подключайтесь!
Реклама. ООО "РЕБРЕИН", ИНН: 7727409582, erid: 2W5zFGdGBov
После регистрации мы отправим вам подарок! Вы сможете найти его в ответном письме.
👉Регистрация
Время проведения:
30 июля (среда) в 19:00 по МСК
Программа практикума:
▪️ Потребление ресурсов: top/htop, iotop и др.
▫️ Расход и структура памяти: valgrind, py-spy и др.
▪️ Системные вызовы: strace
▫️ Создание и операции с файлами: inotify
Кто ведёт?
Даниил Батурин — основатель проекта VyOS, системы для корпоративных и провайдерских маршрутизаторов с открытым исходным кодом.
Бесплатные практикумы по DevOps, Linux, Networks и Golang от REBRAIN каждую неделю. Подключайтесь!
Реклама. ООО "РЕБРЕИН", ИНН: 7727409582, erid: 2W5zFGdGBov
👎12👍6
Утром рассказал, как делаю бэкапы баз Postgresql с помощью скриптов и
Первым делом надо забрать дампы с исходного сервера. Для этого беру простой скрипт, который забирает по SSH только свежие файлы за прошлый день. Если забрать сразу только нужные файлы, то потом не придётся делать в них выборку:
Использую rsync, а список файлов для копирования формирую сразу в выражении ключа, подключившись к нужному хосту по SSH и отсортировав файлы по дате, взяв не старше суток. В данном случае файл timestamp через
Ну а дальше дело техники. По очереди выполняю набор команд для удаления старой базы, создания новой, распаковки и заливки дампа. Перед первым запуском этого скрипта вручную создаю все восстанавливаемые базы и выборочно проверяю восстановление. Потом формирую итоговый список команд:
Сразу говорю, что я тут ничего не оптимизировал, никаких проверок не делал. Если просто взять и запустить, то скорее всего у вас вывалятся какие-то ошибки или что-то пойдёт не так. Я просто показываю идею. У меня уже давно и структура каталогов одна и та же, и подход к именованию баз, бэкапов и т.д. Это всё сделано под меня и работает так уже много лет. Меня устраивает.
В данном скрипте нет никаких проверок успешной работы и оповещений, потому что это не последний этап проверок. Далее в зависимости от того, где эта база используется, запускаются свои проверки. Для баз 1С выполняется автоматическая выгрузка в dt с помощью отдельного скрипта. Если она проходит успешно, то считается, что дамп базы живой и нормально восстановился.
Если же это база от веб проекта, то параллельно из другого бэкапа восстанавливаются исходники в тестовый веб сервер, подключается восстановленная база и работает стандартная веб проверка в Zabbix Server, которая ищет какие-то данные на странице, которые без работающей базы не будут показаны. Если веб проверки проходят успешно, то считается, что база восстановилась, да и в целом бэкап живой.
Более сложные проверки в восстановленных базах я не делаю. Мой опыт в обслуживаемых инфраструктурах показывает, что этого достаточно. Ни разу не сталкивался, что всё прошло успешно, а с базой проблемы. Обычно проблемы возникают сразу в снятии дампа. Если он корректно выполнен, то дальше уже все отрабатывает нормально.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#backup #postgresql #script
pg_dump
. Сейчас покажу, как я их проверяю. Для этого обычно держу небольшой тестовый сервер с той же версией Postgresql. В идеале это должна быть копия прода, но не всегда это возможно. На нём же зачастую проверяю обновления.Первым делом надо забрать дампы с исходного сервера. Для этого беру простой скрипт, который забирает по SSH только свежие файлы за прошлый день. Если забрать сразу только нужные файлы, то потом не придётся делать в них выборку:
#!/bin/bash
/usr/bin/rsync -av --progress --files-from=<(ssh [email protected] '/usr/bin/find /var/lib/pgpro/backup -type f -mtime -1 -exec basename {} \; | egrep -v timestamp') [email protected]:/var/lib/pgpro/backup/ /data/backup/
Использую rsync, а список файлов для копирования формирую сразу в выражении ключа, подключившись к нужному хосту по SSH и отсортировав файлы по дате, взяв не старше суток. В данном случае файл timestamp через
egrep -v
добавлен в исключения. У меня там метка времени последнего бэкапа хранится для нужд мониторинга.Ну а дальше дело техники. По очереди выполняю набор команд для удаления старой базы, создания новой, распаковки и заливки дампа. Перед первым запуском этого скрипта вручную создаю все восстанавливаемые базы и выборочно проверяю восстановление. Потом формирую итоговый список команд:
#!/bin/bash
BASES=`/opt/pgpro/1c-16/bin/psql -U postgres -l | grep "_buh\|_zup" | awk '{print $1}'`
BACKUP_DIR="/data/backup"
for i in ${BASES};
do
echo "`date +"%Y-%m-%d_%H-%M-%S"` Drop database ${i}"
/opt/pgpro/1c-16/bin/dropdb -U postgres ${i}
echo "`date +"%Y-%m-%d_%H-%M-%S"` Create database ${i}"
/opt/pgpro/1c-16/bin/createdb -U postgres -T template0 ${i}
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start extract $i"
/usr/bin/find /data/backup -type f -name *${i}* -exec /usr/bin/unpigz '{}' \;
echo "`date +"%Y-%m-%d_%H-%M-%S"` End extract $i"
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start restore $i"
/opt/pgpro/1c-16/bin/psql -U postgres ${i} < ${BACKUP_DIR}/`ls ${BACKUP_DIR} | grep ${i}` 1>/dev/null
echo "`date +"%Y-%m-%d_%H-%M-%S"` End restore $i"
echo "`date +"%Y-%m-%d_%H-%M-%S"` rm dump ${i}"
/usr/bin/rm ${BACKUP_DIR}/`ls ${BACKUP_DIR} | grep ${i}`
done
Сразу говорю, что я тут ничего не оптимизировал, никаких проверок не делал. Если просто взять и запустить, то скорее всего у вас вывалятся какие-то ошибки или что-то пойдёт не так. Я просто показываю идею. У меня уже давно и структура каталогов одна и та же, и подход к именованию баз, бэкапов и т.д. Это всё сделано под меня и работает так уже много лет. Меня устраивает.
В данном скрипте нет никаких проверок успешной работы и оповещений, потому что это не последний этап проверок. Далее в зависимости от того, где эта база используется, запускаются свои проверки. Для баз 1С выполняется автоматическая выгрузка в dt с помощью отдельного скрипта. Если она проходит успешно, то считается, что дамп базы живой и нормально восстановился.
Если же это база от веб проекта, то параллельно из другого бэкапа восстанавливаются исходники в тестовый веб сервер, подключается восстановленная база и работает стандартная веб проверка в Zabbix Server, которая ищет какие-то данные на странице, которые без работающей базы не будут показаны. Если веб проверки проходят успешно, то считается, что база восстановилась, да и в целом бэкап живой.
Более сложные проверки в восстановленных базах я не делаю. Мой опыт в обслуживаемых инфраструктурах показывает, что этого достаточно. Ни разу не сталкивался, что всё прошло успешно, а с базой проблемы. Обычно проблемы возникают сразу в снятии дампа. Если он корректно выполнен, то дальше уже все отрабатывает нормально.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#backup #postgresql #script
Telegram
ServerAdmin.ru
Раз уж я рассмотрел панели для управления бэкапами (Postgresus и Pgbackweb) в виде дампов в Postgresql, было бы логично рассмотреть и вариант со своими велосипедами на bash. Поделюсь тем, что использую я.
Сначала полный текст скрипта для бэкапа:
#!/bin/bash…
Сначала полный текст скрипта для бэкапа:
#!/bin/bash…
👍95👎4
В последних публикациях на тему бэкапа баз в Postgresql не раз всплывал вопрос: "А есть ли веб панели для управления бэкапами баз MySQL?". Я сам никогда их не использовал и не встречал. Знаю, что инструменты для подобного бэкапа есть в панелях по управлению веб серверами, типа Hestiacp, aaPanel и им подобным. Очевидно, если у вас не веб сервер, то такую панель ставить не имеет смысла. А специализированных панелей только для бэкапов не существует.
Решение, как оказалось, есть на поверхности. Существует известная веб панель для управления сервером - Webmin. Странно, что я по ней ни одной заметки ещё не написал. Хоть сам и не ставлю на свои сервера, но приходилось работать. Там есть интересные возможности, ради которых её можно использовать.
В Webmin есть модуль для управления MySQL. Я его попробовал. Настроек немного, но сделано вполне функционально. Я там немного покумекал, как сделать наиболее удобно и получилось неплохо. Расскажу по шагам, как я всё настроил.
1️⃣ Установка. Панель собрана в пакеты под популярные дистрибутивы. Подключить репозиторий можно автоматически через скрипт:
Либо вручную, добавив репозиторий и ключ от него. Для Debian это:
После установки можно идти по IP адресу сервера на порт 10000 и заходить под учёткой root. После этого в разделе Webmin ⇨ Webmin Configuration ⇨ IP Access Control ограничьте доступ к панели по IP адресам. Её нельзя выставлять в публичный доступ. В панели периодически находят уязвимости, а у неё полный доступ к серверу.
2️⃣ Если MySQL сервер устанавливался после установки Webmin, то модуль управления будет в списке Un-used Modules, если после, то в Servers. Чтобы модуль переехал из Un-used, нажмите на Refresh Modules.
3️⃣ В модуле есть возможность настроить подключение к MySQL серверу в разделе Configuration ⇨ Server Connections. По умолчанию используется localhost, но вы можете подключиться к любому другому серверу, в том числе в контейнере. Главное, чтобы к нему был доступ извне.
4️⃣ Можно настроить бэкап как конкретной базы, так и всех разом. При бэкапе всех баз, каждая из них сохраняется в отдельный файл и может при желании сразу сжиматься. Бэкап выполняется через стандартный
5️⃣ Для бэкапов есть планировщик. Работает в формате заданий cron. Да и сами задания добавляются в системный файл
6️⃣ Основное неудобство – задание бэкапа каждый раз перезаписывает файлы. Нет возможности хранить несколько копий и автоматически удалять старые. Я решил этот вопрос максимально просто в лоб.
Можно указать команды, которые будут выполняться до запуска бэкапа и после. Настроил бэкап в директорию
Она создаёт директорию вида
Для того, чтобы очищать старые бэкапы, добавил команду перед запуском:
Она оставляет 30 новых директорий, а более старые удаляет. Вопрос с ротацией бэкапов решён. Работает просто и наглядно. При желании можно добавить ещё одну команду, которая будет куда-нибудь во вне копировать эти файлы.
7️⃣ Для восстановления бэкапов достаточно создать новую базу или выбрать существующую, зайти в неё, выбрать раздел Execute SQL ⇨ Run SQL from file ⇨ From local file и выбрать один из дампов. При желании можно подключиться к другому серверу и восстановить бэкап туда.
Получилось простое в настройке и вполне функциональное решение.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#backup #mysql
Решение, как оказалось, есть на поверхности. Существует известная веб панель для управления сервером - Webmin. Странно, что я по ней ни одной заметки ещё не написал. Хоть сам и не ставлю на свои сервера, но приходилось работать. Там есть интересные возможности, ради которых её можно использовать.
В Webmin есть модуль для управления MySQL. Я его попробовал. Настроек немного, но сделано вполне функционально. Я там немного покумекал, как сделать наиболее удобно и получилось неплохо. Расскажу по шагам, как я всё настроил.
# curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
# sh webmin-setup-repo.sh
Либо вручную, добавив репозиторий и ключ от него. Для Debian это:
deb https://download.webmin.com/download/newkey/repository stable contrib
# apt-get install webmin --install-recommends
После установки можно идти по IP адресу сервера на порт 10000 и заходить под учёткой root. После этого в разделе Webmin ⇨ Webmin Configuration ⇨ IP Access Control ограничьте доступ к панели по IP адресам. Её нельзя выставлять в публичный доступ. В панели периодически находят уязвимости, а у неё полный доступ к серверу.
mysqldump
. Ключи запуска могут добавлять при необходимости. /var/spool/cron/crontabs/root
.Можно указать команды, которые будут выполняться до запуска бэкапа и после. Настроил бэкап в директорию
/root/sql_backup
а после бэкапа добавил команду:mkdir /mnt/backup/`date +"%Y-%m-%d_%H-%M"` && cp -R /root/sql_backup/* /mnt/backup/`date +"%Y-%m-%d_%H-%M"`/
Она создаёт директорию вида
2025-07-23_16-27
и копирует туда созданные файлы. При следующем запуске имя директории будет другое.Для того, чтобы очищать старые бэкапы, добавил команду перед запуском:
find /mnt/backup -type d -printf '%T@ "%p"\n' | sort -n | head -n -30 | awk '{print $2}' | xargs -I {} rm -r {}
Она оставляет 30 новых директорий, а более старые удаляет. Вопрос с ротацией бэкапов решён. Работает просто и наглядно. При желании можно добавить ещё одну команду, которая будет куда-нибудь во вне копировать эти файлы.
Получилось простое в настройке и вполне функциональное решение.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#backup #mysql
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍68👎5
❓ Когда инфраструктура IT-отдела опирается на Windows, вы чувствуете себя ограниченным в возможностях?
Linux уже давно стал стандартом для серверных решений, контейнеров и облаков.
💪 Курс «Administrator Linux. Basic» погрузит вас в мир администрирования «с нуля»: от работы в терминале и Bash-скриптов до настройки веб- и MySQL-серверов, Docker-контейнеров, мониторинга через Grafana, Prometheus и ELK. На живых вебинарах вы посмотрите реальные сценарии — от установки Ubuntu в VirtualBox до развертывания микросервисов.
🚀 После курса вы сможете:
– уверенно работать в Bash и управлять пользователями, правами и пакетами;
– настраивать и оптимизировать Nginx/Apache, MySQL, создавать Docker-контейнеры и CI/CD-потоки через Git;
– подключать системы мониторинга: Grafana, Prometheus, ELK и настраивать тревоги;
– анализировать сетевой трафик и фильтровать пакеты через iptables.
👉 Пройдите бесплатное вступительное тестирование и получите персональную скидку на обучение: https://clck.ru/3NGFcG
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Linux уже давно стал стандартом для серверных решений, контейнеров и облаков.
💪 Курс «Administrator Linux. Basic» погрузит вас в мир администрирования «с нуля»: от работы в терминале и Bash-скриптов до настройки веб- и MySQL-серверов, Docker-контейнеров, мониторинга через Grafana, Prometheus и ELK. На живых вебинарах вы посмотрите реальные сценарии — от установки Ubuntu в VirtualBox до развертывания микросервисов.
🚀 После курса вы сможете:
– уверенно работать в Bash и управлять пользователями, правами и пакетами;
– настраивать и оптимизировать Nginx/Apache, MySQL, создавать Docker-контейнеры и CI/CD-потоки через Git;
– подключать системы мониторинга: Grafana, Prometheus, ELK и настраивать тревоги;
– анализировать сетевой трафик и фильтровать пакеты через iptables.
👉 Пройдите бесплатное вступительное тестирование и получите персональную скидку на обучение: https://clck.ru/3NGFcG
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👎13👍8
Для управления серверами на базе Linux существует множество различных веб панелей. Одна из самых старых и популярных, если не самая популярная – Webmin. Лет 15 я её точно знаю, сколько администрирую Linux. При этом панель развивается и регулярно обновляется.
В общем случае ничего подобного на свои сервера я не ставлю, так как умею и привык настраивать в консоли. Но в каких-то отдельных случаях устанавливал и пользовался. Плюс, много раз видел её в использовании у других администраторов. Она хоть и не даёт гибкости в настройках, но всю базу с её помощью можно настроить через веб интерфейс, не заходя в консоль вообще.
Устанавливается просто:
После установки можно заходить браузером на 10000-й порт сервера и логиниться под локальной учётной записью root. Настоятельно рекомендую сразу же ограничить доступ к панели в разделе Webmin ⇨ Webmin Configuration ⇨ IP Access Control. В ней периодически находят критические уязвимости, а у неё полный доступ к серверу с максимальными правами. Очень легко получить взлом сервера через неё. Откройте её только для себя, максимально ограничив доступ даже в локальной сети.
Не буду рассказывать про все возможности Webmin. Перечислю только те, что использовал я, либо видел у других.
🔹Удобный просмотр логов в разделе System ⇨ System Logs. Ради этого я не раз устанавливал Webmin туда, где нужно было часто в них ковыряться. Например, удобно было смотреть историю письма на почтовом сервере по его ID. Webmin поддерживает текстовые логи syslog и бинарные логи от systemd. Реализован удобный просмотр через веб интерфейс с возможностью там же грепнуть по какой-то строке.
🔹Ручной запуск самописных скриптов. Самому мне нет нужды в этом, у меня всегда консоль под рукой. Но если нужно кому-то передать возможность запускать скрипты через браузер, то Webmin – быстрое и удобное решение для этого. В разделе Tools ⇨ Custom Commands можно добавить любые консольные команды или скрипты. Поддерживаются в том числе и SQL команды с возможностью задать сервер и учётку для исполнения.
При этом веб интерфейс нормально работает через смартфон. Оттуда есть в том числе доступ к консоли сервера. Вы получаете удобный инструмент для выполнения каких-то действий с сервером в смартфоне. Можно заскриптовать разворачивание копии прода для разработчиков с бэкап сервера и отдать им в управление. Пусть сами это делают, когда им надо обновить стенд.
🔹Управление правилами iptables в Networking ⇨ Linux Firewall. Сам я никогда не пользовался, так как предпочитаю правила держать в одном общем скрипте, чтобы они все были перед глазами. Но видел как другие админы использовали этот модуль. Он удобно реализован и лично у меня не возникало проблем, если нужно было что-то посмотреть или подправить. Интерфейс передаёт особенности настройки iptables.
🔹Управлением запущенными сервисами, типа Samba, MySQL и т.д. Если вам не хочется или нет необходимости в тонкой настройке через файлы конфигурации, то через Webmin вы без проблем настроите базовую функциональность. Причём все конфигурации будут на стандартных местах. Webmin не отнимает возможность настраивать вручную в консоли. Если вы измените что-то через консоль, то это не сломает настройку через Webmin.
Я видел навороченные настройки Samba с множеством сетевых дисков и настроенными доступами для различных пользователей. Сделано удобно. Если надо дать какому-то пользователю доступ к общей шаре, то это можно быстро сделать через Webmin. Это позволяет передать управление данной настройкой эникею. Если пользователей много, я обычно к AD или другому LDAP подключал самбу и управлял доступом через них
Привёл несколько примеров, чтобы дать представление о том, что такое Webmin и как может использоваться. А так, там возможностей очень много.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#управление
В общем случае ничего подобного на свои сервера я не ставлю, так как умею и привык настраивать в консоли. Но в каких-то отдельных случаях устанавливал и пользовался. Плюс, много раз видел её в использовании у других администраторов. Она хоть и не даёт гибкости в настройках, но всю базу с её помощью можно настроить через веб интерфейс, не заходя в консоль вообще.
Устанавливается просто:
# curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
# sh webmin-setup-repo.sh
# apt-get install webmin --install-recommends
После установки можно заходить браузером на 10000-й порт сервера и логиниться под локальной учётной записью root. Настоятельно рекомендую сразу же ограничить доступ к панели в разделе Webmin ⇨ Webmin Configuration ⇨ IP Access Control. В ней периодически находят критические уязвимости, а у неё полный доступ к серверу с максимальными правами. Очень легко получить взлом сервера через неё. Откройте её только для себя, максимально ограничив доступ даже в локальной сети.
Не буду рассказывать про все возможности Webmin. Перечислю только те, что использовал я, либо видел у других.
🔹Удобный просмотр логов в разделе System ⇨ System Logs. Ради этого я не раз устанавливал Webmin туда, где нужно было часто в них ковыряться. Например, удобно было смотреть историю письма на почтовом сервере по его ID. Webmin поддерживает текстовые логи syslog и бинарные логи от systemd. Реализован удобный просмотр через веб интерфейс с возможностью там же грепнуть по какой-то строке.
🔹Ручной запуск самописных скриптов. Самому мне нет нужды в этом, у меня всегда консоль под рукой. Но если нужно кому-то передать возможность запускать скрипты через браузер, то Webmin – быстрое и удобное решение для этого. В разделе Tools ⇨ Custom Commands можно добавить любые консольные команды или скрипты. Поддерживаются в том числе и SQL команды с возможностью задать сервер и учётку для исполнения.
При этом веб интерфейс нормально работает через смартфон. Оттуда есть в том числе доступ к консоли сервера. Вы получаете удобный инструмент для выполнения каких-то действий с сервером в смартфоне. Можно заскриптовать разворачивание копии прода для разработчиков с бэкап сервера и отдать им в управление. Пусть сами это делают, когда им надо обновить стенд.
🔹Управление правилами iptables в Networking ⇨ Linux Firewall. Сам я никогда не пользовался, так как предпочитаю правила держать в одном общем скрипте, чтобы они все были перед глазами. Но видел как другие админы использовали этот модуль. Он удобно реализован и лично у меня не возникало проблем, если нужно было что-то посмотреть или подправить. Интерфейс передаёт особенности настройки iptables.
🔹Управлением запущенными сервисами, типа Samba, MySQL и т.д. Если вам не хочется или нет необходимости в тонкой настройке через файлы конфигурации, то через Webmin вы без проблем настроите базовую функциональность. Причём все конфигурации будут на стандартных местах. Webmin не отнимает возможность настраивать вручную в консоли. Если вы измените что-то через консоль, то это не сломает настройку через Webmin.
Я видел навороченные настройки Samba с множеством сетевых дисков и настроенными доступами для различных пользователей. Сделано удобно. Если надо дать какому-то пользователю доступ к общей шаре, то это можно быстро сделать через Webmin. Это позволяет передать управление данной настройкой эникею. Если пользователей много, я обычно к AD или другому LDAP подключал самбу и управлял доступом через них
Привёл несколько примеров, чтобы дать представление о том, что такое Webmin и как может использоваться. А так, там возможностей очень много.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#управление
1👍101👎5