Резервное копирование и восстановление MySQL с помощью mysqldump
Резервное копирование баз данных — критически важная задача для любого разработчика, администратора или DevOps-инженера. В случае с MySQL и MariaDB одной из самых простых и надёжных утилит для этого является mysqldump
.
В этой статье рассмотрим, как создать бэкап и восстановить данные из дампа, а также полезные опции mysqldump
и практические советы.
Что такое mysqldump
mysqldump
— это CLI-инструмент, который поставляется вместе с MySQL. Он создаёт текстовый дамп базы данных в виде SQL-скрипта: с командами CREATE
, INSERT
, DROP
, LOCK
,что позволяет воссоздать структуру и данные базы на другом сервере.
Как сделать резервную копию
1. Бэкап одной базы данных
mysqldump -u username -p database_name > backup.sql
-u
— пользователь базы данных-p
— запрашивает парольdatabase_name
— имя вашей базыbackup.sql
— куда сохранить дамп
2. Бэкап нескольких баз
mysqldump -u username -p --databases db1 db2 db3 > multi_backup.sql
3. Бэкап всех баз на сервере
mysqldump -u username -p --all-databases > full_backup.sql
4. Бэкап только структуры (без данных)
mysqldump -u username -p --no-data database_name > structure_only.sql
Как восстановить базу данных
1. Создайте новую базу (если нужно)
CREATE DATABASE new_database;
Или через CLI:
mysql -u username -p -e "CREATE DATABASE new_database"
2. Восстановление из дампа
mysql -u username -p new_database < backup.sql
Обратите внимание: в дампе может быть CREATE DATABASE
, тогда база создастся автоматически — проверьте файл перед импортом.
Полезные параметры mysqldump
Опция | Назначение |
---|---|
--single-transaction | Используется для создания консистентного бэкапа без блокировки таблиц |
--no-data | Экспорт только структуры, без данных |
--skip-lock-tables | Не блокировать таблицы во время дампа (важно для InnoDB) |
--routines | Включить экспорт хранимых процедур и функций |
--triggers | Включить экспорт триггеров |
--compress | Сжимает данные при передаче через сеть |
Советы и лучшие практики
- Используйте
--single-transaction
для InnoDB, чтобы избежать блокировок. - Автоматизируйте бэкапы через
cron
или systemd timer. - Храните дампы не только локально: используйте облако (S3, GCS) или удалённый сервер.
- Шифруйте архивы с чувствительными данными перед отправкой в сеть.
- Используйте
gzip
/xz
/zstd
для сжатия:
mysqldump -u user -p db | gzip > db_backup.sql.gz
Пример скрипта для автоматизации
#!/bin/bash
DATE=$(date +%F)
DB_NAME=\"your_database\"
BACKUP_DIR=\"/var/backups/mysql\"
USER=\"root\"
PASS=\"your_password\"
mkdir -p $BACKUP_DIR
mysqldump -u $USER -p$PASS $DB_NAME | gzip > \"$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz\"
Заключение
mysqldump
— это удобный и мощный инструмент, который должен быть в арсенале каждого, кто работает с MySQL. Освоив его, вы сможете надёжно создавать резервные копии и быстро восстанавливать базы данных в случае сбоя.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний