15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
21.10.2024
2 +1

Як створити резервну копію бази даних 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 без графічного інтерфейсу MySQL Workbench

MySQL Workbench не має вбудованого планувальника. Для регулярного резервного копіювання викликайте mysqldump безпосередньо зі скрипту оболонки та плануйте його за допомогою cron або таймера systemd.

Скрипт оболонки для автоматизованого щоденного резервного копіювання

#!/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

Примітка щодо безпеки: Зберігання пароля у скрипті оболонки є прийнятним лише якщо скрипт має права доступу 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
Вимога відновлення до певного моменту часуБінарний журнал + повний дамп
Керований хостинг з планувальником GUIcPanel 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 GB оцініть інструменти фізичного резервного копіювання; логічні резервні копії такого масштабу вводять неприйнятний час відновлення для більшості 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
Почати