Дамп базы данных
Дамп базы данных — файл со снимком её содержимого, обычно набор SQL-команд, из которого базу можно воссоздать с нуля.
Что такое дамп базы данных
Дамп (dump) — файл, содержащий полный снимок базы данных на момент выгрузки: структуру таблиц, данные, индексы, права. Чаще всего это обычный текстовый файл с SQL-командами: CREATE TABLE, затем INSERT со всеми строками. Выполнив его на чистом сервере, вы получите базу в том же состоянии.
Зачем нужен: резервное копирование, перенос базы между серверами и версиями СУБД, поднятие копии прода на машине разработчика, архив перед рискованной миграцией.
Логический и физический бэкап
| Логический (дамп) | Физический | |
|---|---|---|
| Что копирует | SQL-команды или данные | Файлы БД с диска |
| Инструменты | pg_dump, mysqldump |
pg_basebackup, снапшот ФС |
| Размер | Меньше (особенно сжатый) | Как база на диске |
| Скорость снятия | Медленнее | Быстрее |
| Восстановление | Медленное (выполняются INSERT) |
Быстрое (копирование файлов) |
| Между версиями СУБД | Да | Нет |
| Часть базы | Да, любые таблицы | Только целиком |
| Восстановление на момент | Нет | Да, с журналом транзакций |
Практика: логический дамп — для переноса, разработки и небольших баз; физический плюс архив WAL — для боевых баз в сотни гигабайт, где pg_dump слишком долог, а восстановление на точку во времени обязательно.
PostgreSQL: pg_dump
# Обычный SQL-дамп со сжатием
pg_dump -U app -d shop | gzip > shop_$(date +%F).sql.gz
# Custom-формат — предпочтительный вариант
pg_dump -U app -d shop -Fc -f shop.dump
# Только схема / только данные
pg_dump -U app -d shop --schema-only -f schema.sql
pg_dump -U app -d shop --data-only -t orders -f orders.sql
# Все базы кластера вместе с ролями
pg_dumpall -U postgres > cluster.sql
Восстановление:
gunzip -c shop_2026-07-17.sql.gz | psql -U app -d shop_new
# Custom-формат: параллельно, в 4 потока
pg_restore -U app -d shop_new -j 4 shop.dump
Формат -Fc (custom) стоит предпочитать обычному SQL: он сжат, позволяет восстанавливать выборочные таблицы и распараллеливать pg_restore через -j. На большой базе разница во времени восстановления — часы.
pg_dump снимает согласованный снимок: дамп соответствует состоянию базы на момент старта команды, даже если она шла час и данные всё это время менялись. Работу приложения он не блокирует, но долгая транзакция мешает VACUUM и удерживает старые версии строк.
MySQL: mysqldump
mysqldump -u root -p --single-transaction --routines --triggers \
shop | gzip > shop_$(date +%F).sql.gz
# Все базы
mysqldump -u root -p --all-databases --single-transaction > all.sql
# Одна таблица
mysqldump -u root -p shop orders > orders.sql
Восстановление:
mysql -u root -p -e "CREATE DATABASE shop_new CHARACTER SET utf8mb4"
gunzip -c shop_2026-07-17.sql.gz | mysql -u root -p shop_new
--single-transaction обязателен для InnoDB: без него mysqldump блокирует таблицы на запись, останавливая работу приложения на всё время выгрузки. С ним дамп снимается в одной транзакции, консистентно и без блокировок. Оговорка: на MyISAM-таблицах это не работает — они не транзакционные (подробнее про движки).
--routines и --triggers не включены по умолчанию — забыть их значит получить дамп без хранимых процедур и триггеров и узнать об этом при восстановлении.
Другие СУБД
# MongoDB
mongodump --uri="mongodb://localhost:27017" --db=shop --out=/backup/
mongorestore --uri="mongodb://localhost:27017" /backup/
# SQLite — база и так один файл, но дамп в SQL тоже есть
sqlite3 app.db .dump > app.sql
# ClickHouse
clickhouse-client -q "SELECT * FROM events FORMAT Native" > events.native
В MS SQL Server роль дампа играет BACKUP DATABASE с файлом .bak — это ближе к физическому бэкапу.
Автоматизация и правила
#!/bin/bash
# /usr/local/bin/pg_backup.sh — в cron: 0 3 * * *
set -euo pipefail
BACKUP_DIR=/var/backups/pg
DATE=$(date +%F)
pg_dump -U app -d shop -Fc -f "$BACKUP_DIR/shop_$DATE.dump"
find "$BACKUP_DIR" -name '*.dump' -mtime +14 -delete
mc cp "$BACKUP_DIR/shop_$DATE.dump" s3/backups/pg/ # копия вне сервера
Что действительно важно на практике:
- Бэкап, который не восстанавливали, — не бэкап. Регулярно поднимайте дамп на тестовом сервере. Битые или пустые дампы обнаруживаются именно так, а не в момент аварии.
- Копия должна лежать не на том же сервере. Дамп рядом с базой не переживёт отказ диска или компрометацию машины.
- Дамп — это все ваши данные одним файлом. Персональные данные из него утекают целиком, поэтому шифрование и ограничение доступа — не формальность (152-ФЗ).
- Репликация не заменяет дамп. Ошибочный
DELETEдоедет до реплики мгновенно; откатиться можно только из бэкапа. set -euo pipefailв скрипте — чтобы упавшийpg_dumpне привёл к тихому удалению старых копий следующей строкой.
Связанные термины
- Резервное копирование — процесс, частью которого является дамп
- Базы данных — то, что выгружается
- PostgreSQL —
pg_dumpиpg_restore - MySQL / MariaDB —
mysqldump - Репликация — то, что дамп не заменяет и наоборот
- Миграции БД — снимайте дамп перед накаткой
Готовы запустить GPU-задачу?
Запустить GPU-сервер