Исключение таблиц из резервной копии с помощью mysqldump

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Bash
Скопировать код
mysqldump -u username -p --ignore-table=database.table1 database_name > backup.sql

Подставьте вместо username, database_name и table1 соответствующие значения. Параметр --ignore-table указывает утилите mysqldump не включать указанные таблицы в дамп.

Кинга Идем в IT: пошаговый план для смены профессии

Многократное исключение: Исключение нескольких таблиц

Настроим процесс создания резервных копий таким образом, чтобы исключить сразу несколько таблиц:

Bash
Скопировать код
mysqldump -u username -p --ignore-table=database.table1 --ignore-table=database.table2 database_name > backup.sql

В этом случае table1 и table2 исключаются из дампа.

Конечный скрипт: Автоматическое исключение таблиц

Запоминать все исключаемые из дампа таблицы бывает неудобно. В таких случаях можно использовать Bash-скрипт, который будет читать имена таблиц из предварительно созданного файла:

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 копировать только структуру или только данные таблиц:

Bash
Скопировать код
# Копируем структуру без данных
mysqldump -u username -p --no-data database_name > structure.sql

# Копируем данные без структуры таблиц
mysqldump -u username -p --no-create-info database_name > data.sql

Визуализация

Представьте грузовой поезд (🚂), который перевозит груз (📦) из города в город:

Markdown
Скопировать код
Груз поезда: [📦📦📦📦📦]

Но нам нужно исключить некоторые грузы, аналогично тому как mysqldump исключает отдельные таблицы:

Markdown
Скопировать код
До: [📦, 🚫📦, 📦, 🚫📦, 📦]
После: [📦, ------, 📦, ------, 📦]

Движение поезда здесь аналогично работе нашего настроенного дампа базы данных.

Дополнительные советы: На пути к созданию идеального дампа

Консистентные дампы: Создание единовременного снимка

Как и фотография, делаемая в один момент, используйте параметр --single-transaction для создания единого снимка:

Bash
Скопировать код
# Получаем консистентный снимок
mysqldump --single-transaction -u username -p database_name > backup.sql

Экономия места: Сжатие данных на лету

Для сжатия данных на основе mysqldump в реальном времени сочетайте mysqldump с gzip:

Bash
Скопировать код
# Экономим место
mysqldump -u username -p database_name | gzip > backup.sql.gz

Особый случай: Исключение триггеров

Если нужно создать дамп без триггеров, используйте параметр --skip-triggers:

Bash
Скопировать код
# Исключаем триггеры
mysqldump --skip-triggers --routines -u username -p database_name > backup.sql

Конфиденциальность: Безопасное использование пароля

Для безопасного ввода пароля используйте параметр -p без пробела после него:

Bash
Скопировать код
# Безопасное использование пароля
mysqldump -u username -pdatabase_name > backup.sql

Эффективное восстановление

Для восстановления данных:

Bash
Скопировать код
# Восстанавливаем базу данных
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 для резервного копирования нескольких баз данных:

Bash
Скопировать код
# Работаем со множеством баз данных
mysqldump -u username -p --databases db1 db2 --ignore-table=db1.table1 > backup.sql

Полезные материалы

  1. MySQL :: MySQL 8.0 Reference Manual :: 4.5.4 mysqldump — Утилита для создания дампов баз данных
  2. Учебник от DigitalOcean
  3. Linuxize: Руководство по бэкапу и восстановлению баз данных MySQL при помощи mysqldump
  4. Stack Overflow: Ожидание потомков в Windows