8.1 Необхідність бекапу бази даних

Ти навчився створювати схеми баз даних, таблиці, переглядати їх. Також заповнювати ці таблиці даними та змінювати їх. Тепер тобі потрібно навчитися найголовнішого – робити бекапи.

Базу даних легко зламати. Справа в тому, що база даних зазвичай перебуває у стані постійних змін: у неї постійно щось зберігається та додається.

Уяви, що в тебе в браузері відкрита вкладка і ти не хочеш, щоб інформація в ній загубилася. Погодься, що якщо ти просто вирішиш ніколи її не закривати, то це буде не найкращий варіант. Адже браузер може зависнути, його можна закрити випадково, у тебе може зникнути світло або згоріти комп'ютер. Windows може встановити черговий апдейт, та мало що.

Так ось, твоя база даних – це така сама вкладка. І це лише справа часу, коли при черговому записі на диск щось піде не так. Тому тобі обов'язково треба навчитися робити бекапи.

Робити бекапи - це як чистити зуби, у нормальних компаній щоночі робиться бекап вмісту кожної бази даних. Оскільки жорсткі диски теж можуть виходити з ладу і в датацентрах бувають пожежі, то бекапи зазвичай зберігаються в 2-3 копіях в датацентрах у різних частинах світу.

Є кілька підходів до створення бекапу.

Бекап файлів. Так як всі дані бази даних зберігаються на диску у вигляді набору файлів , то найпростіший спосіб - це просто скопіювати ці файли кудись. Або спочатку заархівувати в один архів, а потім кудись скопіювати.

Це найшвидший спосіб зробити бекап, але він вимагає, щоб файли не змінювалися під час їхнього копіювання/архівування. Базу потрібно заморозити під час створення копії, інакше копія буде кривою. Адже, можливо, ситуація, що частина нових даних записалася в базу, а частина – ще ні.

Бекап у вигляді SQL-запитів . Як ти вже знаєш, додавання та зміна даних у базі SQL-сервера завжди представляє у вигляді SQL-запитів. Отже, можна попросити SQL-сервер, щоб він зберіг вміст певної таблиці або таблиць у файл у вигляді SQL-запитів.

Цей спосіб повільніший, ніж попередній, зате з його допомогою можна переносити дані між SQL-серверами різних виробників.

Крім того, не всі дані завжди потрібно зберігати. Часто в тебе в таблицях є купа службової чи застарілої інформації і можна вказати SQL-серверу, щоб він її не зберігав.

Також для таблиць, які зберігають якісь події з прив'язкою до часу, ти можеш просто робити вибірку таких подій за останню добу та зберігати лише їх.

Різні утиліти . Компанії готові платити купу грошей, щоб отримати гарантію, що їхні дані залишаться в цілісності та безпеці. Тому різні ІТ-компанії почали пропонувати рішення на всі випадки життя. Наприклад, є програми, які можуть робити бекап-бази у вигляді файлів і не вимагають, щоб ці файли не змінювалися.

Наприклад, можна встановити спеціальні драйвери в операційну систему та відстежувати, коли, що і де змінювалося.

8.2 Створення бекапу бази даних

Workbench чудово вміє робити експорт та імпорт даних з баз з якими працює. Для цього тобі лише потрібно натиснути пункт меню: Server-> Data Export. І ти побачиш приблизно таку картинку:

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

Порядок такий:

  1. Спочатку вибираємо схему, чи схеми, які експортуватиме.
  2. Потім праворуч вказуємо таблиці для бекапу.
  3. Далі ми маємо вибрати, що саме ми експортуватимемо:
    • лише дані;
    • лише структуру (таблиці буде, але порожні);
    • дані та структуру.
  4. Вибираємо як дані зберегти:
    • один файл кожної таблиці;
    • один файл для всіх таблиць.
  5. Також ти можеш додати код створення схеми на початок файлу. Це зручно при перенесенні даних між різними СУБД.

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. Тоді ви побачите таку картинку:

Як і у випадку з експортом, спочатку вам пропонують вибрати джерело даних: група файлів або всі дані одним файлом.

Потім потрібно вибрати схему, в яку будуть заливатись зазначені дані. Можна вибрати як існуючу схему, так і створити нову.

Важливо! Якщо ваш бекап містить не лише дані, а й опис структури таблиць, то таблиці будуть перестворені (якщо такі вже є в цільовій схемі).