15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
21.10.2024

Как создать резервную копию базы данных MySQL с помощью MySQL Workbench

MySQL Workbench — это кроссплатформенный визуальный инструмент администрирования баз данных, включающий встроенную утилиту Data Export, способную создавать полные логические резервные копии баз данных MySQL и MariaDB в виде переносимых дамп-файлов .sql. Логическая резервная копия, созданная таким образом, фиксирует как DDL-схему, так и DML-данные в виде обычных SQL-операторов, что делает её удобочитаемой, совместимой с системами контроля версий и восстанавливаемой на любом совместимом экземпляре MySQL независимо от операционной системы или механизма хранения.

Это руководство охватывает каждый этап процесса резервного копирования — от начальной настройки подключения до конфигурации экспорта, верификации и автоматизации — а также рассматривает архитектурные компромиссы, определяющие, подходит ли инструмент экспорта MySQL Workbench для вашей среды.

Почему логические резервные копии важны (и когда их недостаточно)

Функция Data Export в MySQL Workbench оборачивает утилиту mysqldump в графический интерфейс. Это означает, что результатом является логическая резервная копия: последовательный набор SQL-операторов (CREATE TABLE, INSERT INTO и т.д.), которые воссоздают базу данных с нуля при воспроизведении. Это отличается от физических резервных копий (копий необработанных файлов данных, создаваемых такими инструментами, как Percona XtraBackup или MySQL Enterprise Backup), которые напрямую копируют файлы табличного пространства InnoDB.

АтрибутЛогическая резервная копия (Workbench / mysqldump)Физическая резервная копия (XtraBackup)
Формат выводаОбычный текст `.sql`Бинарные файлы табличного пространства InnoDB
ПереносимостьЛюбой MySQL-совместимый серверТа же основная версия, та же архитектура ОС
Скорость резервного копирования (большие БД)Медленно — построчная сериализацияБыстро — копирование на уровне файлов
Скорость восстановленияМедленно — воспроизведение каждого SQL-оператораБыстро — копирование файлов + восстановление после сбоя
ГранулярностьТаблица, база данных или полный экземплярПолный экземпляр или отдельное табличное пространство
Гарантия согласованности`–single-transaction` (InnoDB) или блокировка таблицыГорячее резервное копирование с журналом повтора InnoDB
УдобочитаемостьДаНет
Подходит дляРазработка/тестирование, малые и средние БД, миграцииКрупные производственные базы данных

Для баз данных объёмом до нескольких гигабайт на VPS Хостинге или в общей среде логическое резервное копирование через MySQL Workbench вполне практично. Для производственных баз данных объёмом в несколько сотен гигабайт следует рассматривать экспорт через Workbench как вспомогательный инструмент или инструмент для среды разработки, а для достижения производственных целевых показателей RPO/RTO использовать физические резервные копии или резервные копии на основе бинарных журналов.

Шаг 1: Установка MySQL Workbench и проверка совместимости

Загрузите MySQL Workbench с официальной страницы загрузок MySQL. Установщик доступен для Windows, macOS и пакетов Linux Ubuntu/Debian/Fedora.

Соответствие версий имеет значение. MySQL Workbench 8.0.x следует использовать с серверами MySQL 8.0.x. Использование значительно более старого клиента Workbench с более новым сервером (или наоборот) может привести к тому, что мастер экспорта молча пропустит объекты, которые он не может разобрать, например, генерируемые столбцы, функциональные индексы или предложения валидации JSON-схемы, введённые в более поздних версиях.

После установки убедитесь, что версия клиента соответствует версии сервера:

SELECT VERSION();

Выполните этот запрос сразу после подключения, чтобы проверить версию сервера перед началом любого экспорта.

Шаг 2: Создание и тестирование подключения к серверу

Запустите MySQL Workbench. На главном экране найдите панель MySQL Connections и нажмите значок +, чтобы открыть диалог настройки подключения.

Заполните следующие поля:

  • Connection Name — описательная метка (например, prod-db-01)
  • Hostname — IP-адрес или FQDN сервера
  • Port — по умолчанию 3306; измените, если ваш сервер использует нестандартный порт
  • Username — учётная запись пользователя MySQL
  • Password — сохраните в хранилище Workbench или вводите при подключении

Нажмите Test Connection. Успешный тест подтверждает доступность по TCP и правильность учётных данных. Если тест не проходит, распространённые причины включают:

  • Параметр bind-address сервера MySQL установлен в 127.0.0.1, блокируя удалённые подключения
  • Правило брандмауэра, блокирующее порт 3306
  • Учётная запись пользователя не имеет привилегий PROCESS или SELECT, необходимых для экспорта

Минимальные привилегии, необходимые для полного экспорта:

GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT, PROCESS ON *.* TO 'backup_user'@'%';

Никогда не используйте учётную запись root для рутинных операций резервного копирования. Создайте выделенного пользователя резервного копирования только для чтения и предоставьте только необходимые права.

Шаг 3: Открытие инструмента Data Export

После подключения перейдите в Server > Data Export в верхней строке меню. Откроется панель Data Export — графический интерфейс для mysqldump.

Панель разделена на два основных раздела:

  • Левая панель — список всех баз данных, видимых подключённому пользователю
  • Правая панель — формат экспорта, место назначения вывода и дополнительные параметры

Шаг 4: Выбор баз данных и таблиц

В левой панели установите флажок рядом с каждой базой данных, которую вы хотите включить в резервную копию. Раскрытие узла базы данных открывает отдельные таблицы, позволяя выполнять частичный экспорт — например, резервное копирование только таблицы users или таблицы orders без экспорта больших таблиц журналирования или аналитики, которые можно восстановить.

Практический совет: Если вы используете CMS, например WordPress, или пользовательское приложение на Общем Веб-Хостинге, у вас, как правило, есть одна база данных приложения. Выберите её целиком. Если вы управляете мультитенантным приложением с десятками баз данных на Выделенном Сервере, рассмотрите возможность написания скриптов для экспорта по отдельным базам данных, а не экспорта всего через GUI за один раз.

Шаг 5: Настройка параметров экспорта

Этот шаг содержит наиболее важные решения во всём процессе.

Тип содержимого экспорта

В разделе Objects to Export выберите, что будет содержать дамп:

  • Dump Structure and Data — экспортирует как DDL (CREATE TABLE, CREATE VIEW, хранимые процедуры, триггеры, события), так и все данные строк. Это правильный выбор для полной, восстанавливаемой резервной копии.
  • Dump Data Only — экспортирует только операторы INSERT. Используйте это при миграции данных в уже существующую схему.
  • Dump Structure Only — экспортирует только DDL. Полезно для копирования схемы в тестовую среду без копирования конфиденциальных производственных данных.

Место назначения вывода

  • Export to Dump Project Folder — создаёт один файл .sql на таблицу внутри директории. Полезно, когда вам нужно выборочно восстанавливать отдельные таблицы, но создаёт десятки файлов для больших баз данных.
  • Export to Self-Contained File — записывает весь экспорт в один файл .sql. Это стандартный выбор для большинства сценариев резервного копирования, так как создаёт единый артефакт, который легко сжать, передать и сохранить.

Нажмите Browse, чтобы задать путь вывода. Выберите расположение за пределами корневой директории веб-сервера и, в идеале, на отдельном томе от директории данных базы данных.

Дополнительные параметры (критически важны для согласованности)

Нажмите Advanced Options, чтобы открыть базовые флаги mysqldump. Обратите особое внимание на:

  • --single-transaction — оборачивает весь экспорт InnoDB в одну транзакцию с повторяемым чтением, создавая согласованный снимок без блокировки таблиц. Это необходимо для работающих производственных баз данных, использующих InnoDB. Включите этот параметр.
  • --routines — включает хранимые процедуры и функции. По умолчанию отключено в некоторых версиях Workbench.
  • --events — включает запланированные события.
  • --triggers — включён по умолчанию; убедитесь, что флажок установлен.
  • --hex-blob — экспортирует столбцы BLOB, BINARY и VARBINARY в виде шестнадцатеричных строк, предотвращая повреждение кодировки при восстановлении на системах с другими настройками кодировки символов по умолчанию.

Если вы экспортируете базу данных, использующую предложения DEFINER, привязанные к конкретному пользователю (что характерно для представлений и хранимых процедур), имейте в виду, что восстановление дампа на другом сервере завершится ошибкой, если этот пользователь не существует. Удалите или замените предложения DEFINER перед восстановлением:

sed 's/DEFINER=[^ ]* //g' original_dump.sql > cleaned_dump.sql

Шаг 6: Выполнение экспорта

Нажмите Start Export. MySQL Workbench отображает журнал прогресса в реальном времени, показывая каждый объект по мере его обработки. Для больших баз данных это может занять от нескольких минут до нескольких часов в зависимости от объёма данных, количества таблиц и пропускной способности ввода-вывода сервера.

Внимательно следите за выводом журнала. Предупреждения, такие как Access denied for table или Table doesn't exist, указывают на недостаточность привилегий или несоответствия схемы, которые приведут к неполной резервной копии. Не воспринимайте их как косметические — неполная резервная копия не является резервной копией.

По завершении в журнале отобразится Export completed с временной меткой.

Шаг 7: Проверка файла резервной копии

Перейдите в директорию вывода и убедитесь, что файл .sql существует и имеет ненулевой размер. Затем откройте файл в текстовом редакторе или выполните быструю проверку целостности:

head -50 your_backup.sql
tail -20 your_backup.sql

Корректный дамп начинается с блока комментариев, содержащего версию mysqldump и версию сервера, за которым следуют операторы SET для кодировки символов и проверок внешних ключей. Он заканчивается финальным комментарием -- Dump completed on YYYY-MM-DD HH:MM:SS. Если файл усечён или обрывается внезапно, экспорт был прерван и резервная копия непригодна для использования.

Для дополнительной уверенности выполните тестовое восстановление в непроизводственную базу данных:

mysql -u root -p test_restore_db < your_backup.sql

Затем выборочно проверьте количество строк по сравнению с источником:

SELECT COUNT(*) FROM test_restore_db.your_critical_table;

Резервная копия, которая никогда не тестировалась, — это предположение, а не гарантия.

Шаг 8: Сжатие и защита файла резервной копии

Необработанные дампы .sql очень хорошо сжимаются благодаря своей повторяющейся текстовой структуре. Выполните сжатие сразу после экспорта:

gzip -9 your_backup.sql

Обычно это уменьшает размер файла на 70–90%. Для баз данных, содержащих конфиденциальные данные клиентов, зашифруйте сжатый архив перед хранением или передачей:

openssl enc -aes-256-cbc -salt -pbkdf2 -in your_backup.sql.gz -out your_backup.sql.gz.enc -k 'your-strong-passphrase'

Храните парольную фразу отдельно от файла резервной копии — никогда в той же директории или репозитории.

Если ваше приложение использует HTTPS (обеспечиваемый SSL Сертификатом), применяйте ту же дисциплину к передаче резервных копий: никогда не перемещайте незашифрованные дампы баз данных через обычный HTTP или незашифрованный FTP.

Автоматизация резервного копирования MySQL без GUI MySQL Workbench

MySQL Workbench не имеет встроенного планировщика. Для регулярного резервного копирования вызывайте mysqldump напрямую из shell-скрипта и планируйте его с помощью cron или таймера systemd.

Shell-скрипт для автоматического ежедневного резервного копирования

#!/bin/bash

DB_USER="backup_user"
DB_PASS="your_password"
DB_NAME="your_database"
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%F_%H-%M-%S)
FILENAME="${BACKUP_DIR}/${DB_NAME}_${DATE}.sql.gz"

mkdir -p "$BACKUP_DIR"

mysqldump 
  --user="$DB_USER" 
  --password="$DB_PASS" 
  --single-transaction 
  --routines 
  --triggers 
  --events 
  --hex-blob 
  "$DB_NAME" | gzip -9 > "$FILENAME"

# Retain only the last 14 days of backups
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +14 -delete

Запланируйте выполнение этого скрипта ежедневно в 02:00:

crontab -e

Добавьте следующую строку:

0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

Примечание по безопасности: Хранение пароля в shell-скрипте допустимо только если скрипт имеет права доступа chmod 700 и принадлежит пользователю, выполняющему задание cron. Более безопасный подход — использовать файл параметров MySQL:

# /root/.my.cnf — permissions must be 600
[client]
user=backup_user
password=your_password

Затем полностью удалите флаги --user и --password из скрипта; mysqldump будет автоматически считывать учётные данные из .my.cnf.

Для команд, управляющих несколькими базами данных на нескольких серверах, рассмотрите возможность сочетания этой автоматизации с VPS с cPanel, который включает встроенный менеджер запланированного резервного копирования, обрабатывающий хранение, удалённые места назначения и уведомления по электронной почте без ручного написания скриптов.

Восстановление резервной копии, созданной с помощью MySQL Workbench

Восстановление из дампа, созданного Workbench, несложно, но требует внимания к нескольким деталям.

Создайте целевую базу данных, если она не существует:

CREATE DATABASE restored_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

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

mysql -u root -p restored_db < your_backup.sql

Если дамп был создан с флагами --databases или --all-databases (которые встраивают операторы CREATE DATABASE и USE), не указывайте целевую базу данных в командной строке — дамп обрабатывает это внутренне. Экспорт одной базы данных в Workbench по умолчанию не включает эти операторы, поэтому вам необходимо вручную создать и указать целевую базу данных.

Для сжатых дампов:

gunzip -c your_backup.sql.gz | mysql -u root -p restored_db

Следите за выводом восстановления на наличие ошибок. Нарушения ограничений внешних ключей во время восстановления обычно вызваны порядком импорта таблиц. Если это происходит, временно отключите проверки внешних ключей:

SET FOREIGN_KEY_CHECKS = 0;
-- run restore
SET FOREIGN_KEY_CHECKS = 1;

Матрица решений: когда использовать каждый метод резервного копирования

СценарийРекомендуемый инструмент
Небольшая база данных, периодическое ручное резервное копированиеMySQL Workbench Data Export
Автоматическое ежедневное резервное копирование на Linux VPS`mysqldump` через cron-скрипт
Большая база данных InnoDB, минимальное время простояPercona XtraBackup
Требование восстановления на определённый момент времениБинарный журнал + полный дамп
Управляемый хостинг с GUI-планировщикомcPanel Backup Manager
Миграция между версиямиЛогический дамп (mysqldump / Workbench)
Аварийное восстановление с RPO менее минутыMySQL Group Replication + физическое резервное копирование

Контрольный список ключевых технических выводов

  • Используйте выделенного пользователя резервного копирования с привилегиями SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT и PROCESS — никогда root.
  • Всегда включайте --single-transaction для таблиц InnoDB, чтобы избежать блокировок и обеспечить согласованный снимок.
  • Включайте флаги --routines, --triggers и --events; Workbench может не включать все из них по умолчанию.
  • Убедитесь, что файл дампа заканчивается комментарием -- Dump completed, прежде чем считать его действительным.
  • Тестируйте восстановление в непроизводственную базу данных на регулярной основе — как минимум ежемесячно.
  • Немедленно сжимайте дампы с помощью gzip и шифруйте конфиденциальные архивы с использованием AES-256 перед передачей или внешним хранением.
  • Удаляйте или заменяйте предложения DEFINER при восстановлении на сервер с другим набором пользователей.
  • Для баз данных размером более ~10 ГБ оцените инструменты физического резервного копирования; логические резервные копии такого масштаба вводят неприемлемое время восстановления для большинства SLA.
  • Храните резервные копии на отдельном томе или в удалённом месте — резервная копия на том же диске, что и защищаемая база данных, не является резервной копией.

Часто задаваемые вопросы

Блокирует ли MySQL Workbench таблицы во время экспорта?

Для таблиц InnoDB с включённым параметром --single-transaction блокировки таблиц не устанавливаются. Экспорт использует согласованный снимок для чтения. Для таблиц MyISAM mysqldump устанавливает блокировки чтения, поскольку MyISAM не поддерживает транзакционную согласованность. Если ваша база данных использует смешанные механизмы хранения, экспорт заблокирует таблицы MyISAM, пока таблицы InnoDB читаются транзакционно.

Можно ли создать резервную копию удалённого сервера MySQL с помощью MySQL Workbench?

Да. MySQL Workbench подключается по TCP к любому доступному серверу MySQL. Настройте подключение с IP-адресом или именем хоста удалённого сервера и убедитесь, что порт 3306 (или ваш пользовательский порт) открыт в брандмауэре. Для серверов без прямого публичного доступа Workbench нативно поддерживает SSH-туннелирование — настройте его на вкладке SSH в диалоге подключения.

В чём разница между «Export to Dump Project Folder» и «Export to Self-Contained File»?

Опция папки проекта создаёт один файл .sql на таблицу, что позволяет выборочно восстанавливать отдельные таблицы, но создаёт множество файлов. Опция самодостаточного файла записывает всё в один файл .sql, которым проще управлять, сжимать и передавать. Для большинства случаев использования самодостаточный файл является правильным выбором.

Насколько большим будет мой файл резервной копии .sql по сравнению с фактическим размером базы данных?

Необработанный дамп .sql обычно в 1,5–3 раза больше фактического размера базы данных на диске, поскольку данные строк сериализуются в виде подробных операторов INSERT. После сжатия gzip дамп обычно уменьшается до 10–30% от исходного размера базы данных, что делает сжатые логические резервные копии очень эффективными по использованию хранилища для наборов данных с большим количеством текста.

Может ли MySQL Workbench создавать резервные копии представлений, хранимых процедур и триггеров?

Да, но только если соответствующие параметры явно включены. На панели Advanced Options убедитесь, что --routines (для хранимых процедур и функций) и --events отмечены флажками. Триггеры включаются по умолчанию. Представления включаются как часть экспорта схемы при выборе «Dump Structure and Data» или «Dump Structure Only».

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать