Введение
Когда в инфраструктуре десятки сервисов и баз данных разных типов, ручное резервное копирование превращается в кошмар.
Один сервер использует 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 — простой инструмент для резервного копирования баз данных, особенно если у вас несколько разных серверов и СУБД. Он позволяет стандартизировать процесс, минимизировать ручные шаги и интегрировать резервное копирование в автоматизированные рабочие процессы.