Дамп базы данных — экспорт структуры и данных СУБД в файл для резервного копирования, переноса или клонирования. mysqldump — штатная утилита MySQL/MariaDB, pg_dump — PostgreSQL. Дамп в SQL-формате содержит SQL-операторы, которые при выполнении воссоздают исходную базу данных целиком или частично.
mysqldump
Базовые команды:
# Дамп одной базы
mysqldump -u root -p dbname > backup.sql
# Дамп всех баз
mysqldump -u root -p --all-databases > all_dbs.sql
# Дамп без данных (только структура)
mysqldump -u root -p --no-data dbname > schema.sql
# Дамп с компрессией
mysqldump -u root -p dbname | gzip > backup.sql.gz
mysqldump делает логическую резервную копию: читает данные через SELECT и записывает INSERT-операторы. Логический дамп сохраняет транзакционную согласованность при использовании параметра --single-transaction. Медленнее физического копирования файлов, но переносим между версиями MySQL и совместим с разными платформами.
pg_dump
Базовые команды:
# Дамп в SQL-формат
pg_dump -U postgres dbname > backup.sql
# Дамп в custom-формат (сжатый, быстрое восстановление)
pg_dump -U postgres -Fc dbname > backup.dump
# Дамп всего кластера (включая роли и табличные пространства)
pg_dumpall -U postgres > all_cluster.sql
# Параллельный дамп в directory-формат
pg_dump -U postgres -Fd -j 4 dbname -f backup_dir/
Custom-формат (-Fc) рекомендован для больших баз: он сжат, поддерживает выборочное восстановление отдельных таблиц через pg_restore, параллельное восстановление (-j).
Ограничения и альтернативы
Логические дампы медленнее и объёмнее физических. Для больших баз (100 ГБ+) предпочтительны физические инструменты: Percona XtraBackup (MySQL), pg_basebackup (PostgreSQL). Они делают копию файлов данных «на горячую» без остановки СУБД.
Для полного резервного копирования крупных PostgreSQL используют WAL-архивирование: каждый WAL-сегмент (16 МБ по умолчанию) копируется во внешнее хранилище. Вместе с базовой копией это позволяет восстановить базу на любой момент времени (Point-In-Time Recovery, PITR).
История
mysqldump появился в MySQL 3.x в начале 2000-х как базовый инструмент резервного копирования. pg_dump входит в дистрибутив PostgreSQL с первых версий (1996). Percona XtraBackup создан в 2009 году как альтернатива для MySQL с поддержкой горячего бэкапа без блокировки таблиц (что mysqldump с LOCK TABLES делает по умолчанию).
На что обращать внимание
mysqldump с параметром --single-transaction делает консистентный дамп InnoDB без блокировок — используйте всегда для production. Без этого параметра mysqldump блокирует таблицы на время дампа. pg_dump всегда консистентен без дополнительных параметров (транзакционный снимок). Сжатие дампа: для SQL-файлов pigz (параллельный gzip) значительно быстрее стандартного gzip. При наличии Master-Slave репликации дамп рекомендуется снимать с реплики, не нагружая Master. Дамп нужно хранить вне сервера — локальный дамп не защищает от отказа диска.
Автоматизация дампов
Настройте автоматический дамп через cron на VPS: ежедневный дамп всех баз с ротацией 7-30 дней. Пример cron-задачи MySQL: 0 3 * * * mysqldump -u root -p${MYSQL_PASS} --all-databases | gzip > /backup/mysql_$(date +%Y%m%d).sql.gz. Хранить бэкапы только на том же сервере — недостаточно; используйте off-site backup через rsync/rclone на внешнее хранилище.