1. Необхідність бекапу бази даних
Ти вже вмієш створювати схеми баз даних, таблиці, переглядати їх. А ще — заповнювати ці таблиці даними та змінювати їх. Тепер тобі потрібно навчитися найголовнішого — робити бекапи.
Базу даних дуже легко зламати. Справа в тому, що база даних зазвичай перебуває у стані постійних змін: у ній постійно щось зберігається та додається.
Ось уяви, що у тебе в браузері відкрита вкладка і ти не хочеш, щоб інформація в ній загубилася. Погодься, якщо ти просто вирішиш ніколи її не закривати, це буде не найкращий варіант. Адже браузер може зависнути, його можна закрити випадково, може пропасти світло або згоріти комп'ютер. Windows може встановити черговий апдейт, та раптом що станеться.
Так ось, твоя база даних — це така сама вкладка. І це лише справа часу, коли під час чергового запису на диск щось піде не так. Тому тобі обов'язково треба навчитися робити бекапи.
Робити бекапи — це як чистити зуби: у нормальних компаній щоночі робиться бекап вмісту кожної бази даних. Оскільки жорсткі диски теж можуть виходити з ладу і в датацентрах бувають пожежі, то бекапи зазвичай зберігаються в 2-3 копіях в датацентрах в різних частинах світу.
Є кілька підходів до створення бекапу.
Бекап файлів. Оскільки всі дані бази даних зберігаються на диску у вигляді набору файлів, найпростіший спосіб — це просто скопіювати ці файли кудись. Або спочатку заархівувати до одного архіву, а потім кудись скопіювати.
Це найшвидший спосіб зробити бекап, але він вимагає, щоб файли не змінювалися під час їхнього копіювання/архівування. Базу потрібно заморозити під час створення копії, інакше копія буде кривою. Адже може бути ситуація, що частина нових даних записалася в базу, а частини ще немає.
Бекап у вигляді SQL-запитів. Як ти вже знаєш, додавання та зміну даних у базі SQL-сервера завжди відбувається у вигляді SQL-запитів. Отже, можна попросити SQL-сервер, щоб він зберіг вміст певної таблиці або таблиць до файлу у вигляді SQL-запитів.
Цей спосіб повільніший, ніж попередній, зате з його допомогою можна переносити дані між SQL-серверами різних виробників.
До того ж, не всі дані завжди потрібно зберігати. Часто у тебе в таблицях є купа службової чи застарілої інформації, і можна вказати SQL-серверу, щоб він її не зберігав.
Також для таблиць, які зберігають якісь події з прив'язкою до часу, ти можеш просто робити вибірку таких подій за останню добу та зберігати лише їх.
Різні утиліти. Компанії готові платити купу грошей, щоб отримати гарантію, що їхні дані залишаться в цілісності та безпеці. Тому різні ІТ-компанії почали пропонувати рішення на всі випадки життя. Наприклад, є програми, які можуть робити бекап-бази у вигляді файлів і не вимагають, щоб ці файли не змінювалися.
Наприклад, можна встановити спеціальні драйвери в операційну систему та відстежувати, коли, що і де змінювалося.
2. Створення бекапу бази даних
Workbench чудово вміє робити експорт та імпорт даних із баз, з якими працює. Для цього тобі потрібно лише натиснути пункт меню: Server-> Data Export
. І ти побачиш приблизно таку картинку:
А тепер додамо трохи пояснень:
Порядок такий:
- Спочатку обираємо схему, або схеми, які експортуватиме.
- Потім праворуч вказуємо таблиці для бекапу.
- Далі ми маємо обрати, що саме ми експортуватимемо:
- тільки дані;
- тільки структуру (таблиці буде, але порожні);
- дані та структуру.
- Обираємо як дані зберегти:
- один файл для кожної таблиці;
- один файл для всіх таблиць.
- Також можеш додати код створення схеми на початок файлу. Це зручно під час перенесення даних між різними СУБД.
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 */;
Все вірно, це і є схема наших таблиць, якщо так можна сказати про одну-єдину таблицю.
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-серверу правильно відновити дані.
5. Розгортання бекапу
І нарешті, останнє — це відновлення бази даних із бекапу. Ця дія дуже проста, але корисна.
Припустимо, я хочу, щоб у всіх моїх студентів була певна база даних, щоб ви могли на ній вчитися писати запити. Тоді я просто дам вам посилання на файл, який ви локально у себе розгорнете, і все.
І навіть якщо ти випадково видалиш якісь дані, таблиці, або навіть усю схему, її завжди можна буде відновити з бекапу.
Для того щоб зробити Import даних, потрібно в меню клацнути на пункт Server-> Data Import
. Тоді ти побачиш таку картинку:
Як і у випадку з експортом, спочатку тобі пропонують вибрати джерело даних: група файлів або всі дані одним файлом.
Потім потрібно вибрати схему, в яку будуть заливатись зазначені дані. Ти можеш як обрати існуючу схему, так і створити нову.
Важливо! Якщо твій бекап містить не тільки дані, а й опис структури таблиць, то таблиці будуть перестворені (якщо такі вже є в цільовій схемі).
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ