Исключение таблиц из резервной копии с помощью mysqldump
Быстрый ответ
mysqldump -u username -p --ignore-table=database.table1 database_name > backup.sql
Подставьте вместо username
, database_name
и table1
соответствующие значения. Параметр --ignore-table
указывает утилите mysqldump
не включать указанные таблицы в дамп.
Многократное исключение: Исключение нескольких таблиц
Настроим процесс создания резервных копий таким образом, чтобы исключить сразу несколько таблиц:
mysqldump -u username -p --ignore-table=database.table1 --ignore-table=database.table2 database_name > backup.sql
В этом случае table1
и table2
исключаются из дампа.
Конечный скрипт: Автоматическое исключение таблиц
Запоминать все исключаемые из дампа таблицы бывает неудобно. В таких случаях можно использовать Bash-скрипт, который будет читать имена таблиц из предварительно созданного файла:
# Исключаем таблицы
while read table; do
IGNORE_TABLES+=" --ignore-table=$table"
done < tables_to_skip.txt
mysqldump -u username -p database_name $IGNORE_TABLES > backup.sql
Выборочное резервное копирование: Копирование данных и структуры таблиц в отдельности
Следующие команды позволяют mysqldump
копировать только структуру или только данные таблиц:
# Копируем структуру без данных
mysqldump -u username -p --no-data database_name > structure.sql
# Копируем данные без структуры таблиц
mysqldump -u username -p --no-create-info database_name > data.sql
Визуализация
Представьте грузовой поезд (🚂), который перевозит груз (📦) из города в город:
Груз поезда: [📦📦📦📦📦]
Но нам нужно исключить некоторые грузы, аналогично тому как mysqldump
исключает отдельные таблицы:
До: [📦, 🚫📦, 📦, 🚫📦, 📦]
После: [📦, ------, 📦, ------, 📦]
Движение поезда здесь аналогично работе нашего настроенного дампа базы данных.
Дополнительные советы: На пути к созданию идеального дампа
Консистентные дампы: Создание единовременного снимка
Как и фотография, делаемая в один момент, используйте параметр --single-transaction
для создания единого снимка:
# Получаем консистентный снимок
mysqldump --single-transaction -u username -p database_name > backup.sql
Экономия места: Сжатие данных на лету
Для сжатия данных на основе mysqldump
в реальном времени сочетайте mysqldump
с gzip
:
# Экономим место
mysqldump -u username -p database_name | gzip > backup.sql.gz
Особый случай: Исключение триггеров
Если нужно создать дамп без триггеров, используйте параметр --skip-triggers
:
# Исключаем триггеры
mysqldump --skip-triggers --routines -u username -p database_name > backup.sql
Конфиденциальность: Безопасное использование пароля
Для безопасного ввода пароля используйте параметр -p
без пробела после него:
# Безопасное использование пароля
mysqldump -u username -pdatabase_name > backup.sql
Эффективное восстановление
Для восстановления данных:
# Восстанавливаем базу данных
mysql -u username -p new_database < backup.sql # для .sql файлов
gzip -dc backup.sql.gz | mysql -u username -p new_database # для .sql.gz файлов
Работа со множеством баз данных
Параметр --ignore-table
может быть использован вместе с --databases
для резервного копирования нескольких баз данных:
# Работаем со множеством баз данных
mysqldump -u username -p --databases db1 db2 --ignore-table=db1.table1 > backup.sql