Введение
Когда в инфраструктуре десятки сервисов и баз данных разных типов, ручное резервное копирование превращается в кошмар.
Один сервер использует PostgreSQL, другой — MySQL, третий — MongoDB, и для каждого нужны свои команды (pg_dump, mysqldump, mongodump) и свои скрип��ы.
Проект Dumper решает эту проблему он объединяет все типы баз в один универсальный инструмент.
Dumper написан на Go и работает через CLI, конфигурация задаётся в YAML — поэтому его легко встроить в cron, CI/CD pipelines, GitHub Actions или Docker-окружение.
Преимущества Dumper
-
Мульти-СУБД — PostgreSQL, MySQL, MongoDB и другие.
-
SSH-подключения — можно делать дампы с удалённых серверов.
-
Гибкие шаблоны имён файлов — удобно для хранения и автоматизации.
-
Автоматическая архивация и удаление старых дампов.
-
Простая интеграция с cron / CI / Jenkins / GitLab Runner.
Пример: резервное копирование трёх баз данных
У нас три БД на разных серверах:
|
Сервер |
СУБД |
Назначение |
Хост |
Порт |
|---|---|---|---|---|
|
db-prod-pg |
PostgreSQL |
Продакшен |
10.1.1.10 |
5432 |
|
db-stage-mysql |
MySQL |
Стейджинг |
10.1.1.20 |
3306 |
|
db-analytics-mongo |
MongoDB |
Аналитика |
10.1.1.30 |
27017 |
Конфигурация Dumper
settings:
template: "{%srv%}_{%db%}_{%date%}_{%time%}"
archive: true
remove_dump: true
format: "dump"
dir_dump: "/opt/backups/dumps"
dir_archived: "/opt/backups/archived"
location: "server"
servers:
prod-pg:
name: "db-prod-pg"
host: "10.1.1.10"
port: 22
user: "ubuntu"
private_key: "~/.ssh/id_rsa"
is_passphrase: false
stage-mysql:
name: "db-stage-mysql"
host: "10.1.1.20"
port: 22
user: "deployer"
password: "mysqlpass"
analytics-mongo:
name: "db-analytics-mongo"
host: "10.1.1.30"
port: 22
user: "admin"
private_key: "~/.ssh/id_backup"
is_passphrase: false
databases:
production_pg:
name: "prod_db"
user: "postgres"
password: "pgpass"
server: "prod-pg"
driver: "psql"
format: "plain"
staging_mysql:
name: "staging"
user: "mysqluser"
password: "mysqlpass"
server: "stage-mysql"
driver: "mysql"
format: "sql"
analytics_mongo:
name: "analytics"
user: "root"
password: "mongo123"
server: "analytics-mongo"
driver: "mongo"
format: "bson"
options:
auth_source: "admin"
ssl: true
Запуск вручную
Для проверки можно выполнить дамп одной базы:
./dumper --config ./config.yaml --db production_pg
Или всех баз сразу:
./dumper --config ./config.yaml --all
Или выбырать вручную
./dumper --config ./config.yaml
Автоматизация через cron
Добавим ежедневный бэкап в /etc/crontab:
0 3 * * * root /usr/local/bin/dumper --config /opt/dumper/config.yaml --all >> /var/log/dumper.log 2>&1
Советы и полезные рекомендации
-
Убедитесь, что SSH-ключ настроен и доступ к серверу есть без запроса пароля (или используйте ssh-agent).
-
Проверьте права доступа: пользователь должен иметь права на выполнение дампа (например, pg_dump для PostgreSQL).
-
Мониторьте свободное место на диске: если регулярно делать резервные копии и не удалять старые, очень быстро наберётся объём.
-
Используйте шаблон template так, чтобы имя файла отражало дату / время — удобно для поиска и архивирования.
-
Тестируйте восстановление: резервная копия — не ценна, пока не уверены, что её можно восстановить.
-
Учитывайте чувствительную информацию: файл конфигурации содержит пароли и ключи — храните его в безопасном месте или ограничьте доступ.
-
Ознакомьтесь с форматами: например, MongoDB может использовать формат bson, PostgreSQL — plain, dump, tar.
Заключение
Dumper — простой инструмент для резервного копирования баз данных, особенно если у вас несколько разных серверов и СУБД. Он позволяет стандартизировать процесс, минимизировать ручные шаги и интегрировать резервное копирование в автоматизированные рабочие процессы.
Автор: elkirrs
