mysqldump: резервное копирование и восстановление баз данных MySQL

MySQL / MariaDB · 19.04.2026
mysqldump: резервное копирование и восстановление баз данных MySQL

Основные команды mysqldump

mysqldump — стандартная утилита для создания логических резервных копий MySQL и MariaDB. Она создаёт SQL-файл с командами для воссоздания структуры и данных базы.

Бэкап одной базы данных

# Базовый бэкап
mysqldump -u root -p mydb > mydb_backup.sql

# С сжатием (рекомендуется)
mysqldump -u root -p mydb | gzip > mydb_$(date +%Y%m%d_%H%M%S).sql.gz

# Без блокировки таблиц (для InnoDB)
mysqldump -u root -p --single-transaction --quick mydb | gzip > mydb.sql.gz
Всегда используйте --single-transaction для баз данных InnoDB — это создаёт консистентный снапшот без блокировки таблиц. Без этого флага сайт может "зависнуть" во время бэкапа.

Полезные флаги mysqldump

ФлагОписание
--single-transactionКонсистентный бэкап InnoDB без блокировок
--quickЧитать строки по одной (экономит RAM)
--no-dataТолько структура, без данных
--no-create-infoТолько данные, без CREATE TABLE
--all-databasesБэкап всех баз данных
--routinesВключить хранимые процедуры
--triggersВключить триггеры (по умолчанию ON)

Бэкап всех баз данных

mysqldump -u root -p --all-databases --single-transaction \
    --routines --triggers | gzip > all_databases_$(date +%Y%m%d).sql.gz

Восстановление из дампа

# Восстановление обычного дампа
mysql -u root -p mydb < mydb_backup.sql

# Восстановление сжатого дампа
gunzip < mydb_backup.sql.gz | mysql -u root -p mydb

# Или через zcat
zcat mydb_backup.sql.gz | mysql -u root -p mydb

Автоматизация через cron

sudo nano /etc/cron.d/mysql-backup
# Бэкап каждый день в 2:00, хранить 7 дней
0 2 * * * root mysqldump -u backup_user -pPassword --single-transaction \
    --all-databases | gzip > /backups/mysql/all_$(date +\%Y\%m\%d).sql.gz && \
    find /backups/mysql/ -name "*.sql.gz" -mtime +7 -delete

Создание пользователя только для бэкапов

mysql -u root -p -e "
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'StrongBackupPass';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup_user'@'localhost';
FLUSH PRIVILEGES;"
Не используйте root для автоматических бэкапов — создайте отдельного пользователя с минимальными привилегиями. Пароль храните в ~/.my.cnf, а не в скриптах.

Пароль в ~/.my.cnf (без ввода пароля)

cat ~/.my.cnf
[mysqldump]
user=backup_user
password=StrongBackupPass

chmod 600 ~/.my.cnf
# Теперь можно без -p:
mysqldump mydb > backup.sql
← Назад в базу знаний Задать вопрос поддержке