Резервное копирование и восстановление 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.sql3. Бэкап всех баз на сервере
mysqldump -u username -p --all-databases > full_backup.sql4. Бэкап только структуры (без данных)
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 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний