Основные команды 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