1 min read

mysqldump: шпаргалка по бэкапу и восстановлению MySQL

mysqldump: шпаргалка по бэкапу и восстановлению MySQL

Бэкапы баз данных — одна из тех вещей, про которые все знают но многие делают кое-как. Либо не делают вовсе, либо делают дамп раз в месяц вручную. Потом случается инцидент, и оказывается что последний рабочий бэкап был три недели назад.

Ниже — команды, которые я держу под рукой. mysqldump покрывает большинство задач.

Полный дамп базы

mysqldump -u USER -pPASSWORD DATABASE > /path/to/dump.sql

Пароль сразу после -p без пробела — это намеренно, иначе mysqldump спросит его интерактивно.

Только структура, без данных

mysqldump --no-data -u USER -pPASSWORD DATABASE > /path/to/schema.sql

Удобно когда нужно перенести схему на другой сервер или зафиксировать структуру в git.

Конкретные таблицы

mysqldump -u USER -pPASSWORD DATABASE TABLE1 TABLE2 TABLE3 > /path/to/dump_table.sql

Дамп со сжатием на лету

mysqldump -u USER -pPASSWORD DATABASE | gzip > /path/to/dump.sql.gz

Экономит место — особенно заметно на больших базах. Разница может быть в 5–10 раз.

Дамп с датой в имени файла

mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +/path/to/dump.sql.%Y%m%d.%H%M%S.gz`

Полезно для ротации: запускаешь по крону, каждый файл с уникальным именем, старые удаляешь скриптом.

Восстановление

Из обычного дампа:

mysql -u USER -pPASSWORD DATABASE < /path/to/dump.sql

Из сжатого:

gunzip < /path/to/dump.sql.gz | mysql -u USER -pPASSWORD DATABASE
# или
zcat /path/to/dump.sql.gz | mysql -u USER -pPASSWORD DATABASE

Управление базами из командной строки

mysqladmin -u USER -pPASSWORD create NEWDATABASE   # создать базу
mysqlshow -u USER -pPASSWORD                        # список баз
mysqlshow -u USER -pPASSWORD DATABASE               # таблицы в базе

Работа с MySQL в Docker

Дамп из контейнера:

docker exec -it CONTAINER_ID mysqldump -u root --password=pass DB > /dump.sql

CONTAINER_ID узнаёшь через docker ps -a. Файл сохраняется на хост-машине по указанному пути.

Восстановление в контейнер:

cat /dump.sql | docker exec -i CONTAINER_ID /usr/bin/mysql -u root --password=pass DB

Обрати внимание: для exec при восстановлении нужен флаг -i (без -t), иначе mysql не получит данные из stdin.


Если нужно выстроить нормальный процесс резервного копирования баз данных — пиши на [email protected] или заходи на 1it.pro.

Связаться с нами
Telegram
WhatsApp
Email