8.1 Необхідність бекапу бази даних
Ти навчився створювати схеми баз даних, таблиці, переглядати їх. Також заповнювати ці таблиці даними та змінювати їх. Тепер тобі потрібно навчитися найголовнішого – робити бекапи.
Базу даних легко зламати. Справа в тому, що база даних зазвичай перебуває у стані постійних змін: у неї постійно щось зберігається та додається.
Уяви, що в тебе в браузері відкрита вкладка і ти не хочеш, щоб інформація в ній загубилася. Погодься, що якщо ти просто вирішиш ніколи її не закривати, то це буде не найкращий варіант. Адже браузер може зависнути, його можна закрити випадково, у тебе може зникнути світло або згоріти комп'ютер. Windows може встановити черговий апдейт, та мало що.
Так ось, твоя база даних – це така сама вкладка. І це лише справа часу, коли при черговому записі на диск щось піде не так. Тому тобі обов'язково треба навчитися робити бекапи.
Робити бекапи - це як чистити зуби, у нормальних компаній щоночі робиться бекап вмісту кожної бази даних. Оскільки жорсткі диски теж можуть виходити з ладу і в датацентрах бувають пожежі, то бекапи зазвичай зберігаються в 2-3 копіях в датацентрах у різних частинах світу.
Є кілька підходів до створення бекапу.
Бекап файлів. Так як всі дані бази даних зберігаються на диску у вигляді набору файлів , то найпростіший спосіб - це просто скопіювати ці файли кудись. Або спочатку заархівувати в один архів, а потім кудись скопіювати.
Це найшвидший спосіб зробити бекап, але він вимагає, щоб файли не змінювалися під час їхнього копіювання/архівування. Базу потрібно заморозити під час створення копії, інакше копія буде кривою. Адже, можливо, ситуація, що частина нових даних записалася в базу, а частина – ще ні.
Бекап у вигляді SQL-запитів . Як ти вже знаєш, додавання та зміна даних у базі SQL-сервера завжди представляє у вигляді SQL-запитів. Отже, можна попросити SQL-сервер, щоб він зберіг вміст певної таблиці або таблиць у файл у вигляді SQL-запитів.
Цей спосіб повільніший, ніж попередній, зате з його допомогою можна переносити дані між SQL-серверами різних виробників.
Крім того, не всі дані завжди потрібно зберігати. Часто в тебе в таблицях є купа службової чи застарілої інформації і можна вказати SQL-серверу, щоб він її не зберігав.
Також для таблиць, які зберігають якісь події з прив'язкою до часу, ти можеш просто робити вибірку таких подій за останню добу та зберігати лише їх.
Різні утиліти . Компанії готові платити купу грошей, щоб отримати гарантію, що їхні дані залишаться в цілісності та безпеці. Тому різні ІТ-компанії почали пропонувати рішення на всі випадки життя. Наприклад, є програми, які можуть робити бекап-бази у вигляді файлів і не вимагають, щоб ці файли не змінювалися.
Наприклад, можна встановити спеціальні драйвери в операційну систему та відстежувати, коли, що і де змінювалося.
8.2 Створення бекапу бази даних
Workbench чудово вміє робити експорт та імпорт даних з баз з якими працює. Для цього тобі лише потрібно натиснути пункт меню: Server-> Data Export
. І ти побачиш приблизно таку картинку:

А тепер додамо трохи пояснень:

Порядок такий:
- Спочатку вибираємо схему, чи схеми, які експортуватиме.
- Потім праворуч вказуємо таблиці для бекапу.
- Далі ми маємо вибрати, що саме ми експортуватимемо:
- лише дані;
- лише структуру (таблиці буде, але порожні);
- дані та структуру.
- Вибираємо як дані зберегти:
- один файл кожної таблиці;
- один файл для всіх таблиць.
- Також ти можеш додати код створення схеми на початок файлу. Це зручно при перенесенні даних між різними СУБД.
8.3 Створення бекапу схеми таблиць
Давайте створимо бекап тільки схеми, без даних.
Я вибрав Dump Structure Only та натиснув Start Export.

І ось, що я знайшов у файлі, який зробив Workbench.
--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`level` int(11) DEFAULT NULL,
`created_date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
Все вірно, це і є схема наших таблиць, якщо так можна сказати про одну єдину таблицю.
8.4 Створення бекапу даних
А тепер давай зробимо бекап лише даних, але без структури схеми.
Виберемо Dump Data Only та подивимося, що нам віддадуть:

І ось, що я знайшов у файлі, який зробив Workbench.
--
-- Dumping data for table `user`
--
LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES
(1,'Іванов Іван',40,'2022-05-11'),
(2,'Петроів Нікола',1,'2021-05-01'),
(3,'Сідроов Віталій',8,'2022-05-12');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
Так, дуже схоже на правду. Також ми бачимо спеціальний код, який лочить таблицю user. Це зроблено для того, щоб ти міг просто виконувати цей SQL-скрипт: у ньому містяться всі інструкції, які дозволять будь-якому SQL-серверу правильно відновити дані.
8.5 Розгортання бекапу
І нарешті останнє – це відновлення бази даних із бекапу. Ця дія дуже проста, але корисна.
Допустимо, я хочу, щоб у всіх моїх студентів була певна база даних, щоб ви могли на ній вчитися писати запити. Тоді я просто дам вам посилання на файл, який ви локально розгорнете у себе і все.
І навіть якщо ви випадково видалите якісь дані, таблиці або навіть всю схему, її завжди можна буде відновити з бекапу.
Для того щоб зробити Import даних потрібно в меню натиснути на пункт Server-> Data Import
. Тоді ви побачите таку картинку:

Як і у випадку з експортом, спочатку вам пропонують вибрати джерело даних: група файлів або всі дані одним файлом.
Потім потрібно вибрати схему, в яку будуть заливатись зазначені дані. Можна вибрати як існуючу схему, так і створити нову.
Важливо! Якщо ваш бекап містить не лише дані, а й опис структури таблиць, то таблиці будуть перестворені (якщо такі вже є в цільовій схемі).
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ