8.1 Необходимость бэкапа базы данных

Ты научился создавать схемы баз данных, таблицы, просматривать их. Также заполнять эти таблицы данными и менять их. Теперь тебе нужно научиться самому главному – делать бэкапы.

Базу данных очень легко сломать. Дело в том, что база данных обычно находится в состоянии постоянных изменений: в нее постоянно что-то сохраняется и добавляется.

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

Так вот, твоя база данных – это такая же вкладка. И это только дело времени, когда при очередной записи на диск что-то пойдет не так. Поэтому тебе обязательно нужно научиться делать бэкапы.

Делать бэкапы – это как чистить зубы, у нормальных компаний каждую ночь делается бэкап содержимого каждой базы данных. А так как жесткие диски тоже могут выходить из строя и в датацентрах бывают пожары, то бэкапы обычно сохраняются в 2-3 копиях в датацентрах в разных частях мира.

Есть несколько подходов к созданию бэкапа.

Бэкап файлов. Так как все данные базы данных хранятся на диске в виде набора файлов, то самый простой способ – это просто скопировать файлы куда-нибудь. Или сперва заархивировать в один архив, а потом куда-нибудь скопировать.

Это самый быстрый способ сделать бэкап, но он требует, чтобы файлы не менялись во время их копирования/архивирования. Базу нужно заморозить на время создания копии, иначе копия будет кривая. Ведь может быть ситуация, что часть новых данных записалась в базу, а часть – еще нет.

Бэкап в виде SQL-запросов. Как ты уже знаешь, добавление и изменение данных в базе SQL-сервера всегда представляет в виде SQL-запросов. Так что можно попросить SQL-сервер, чтобы он сохранил содержимое определенной таблицы или таблиц в файл в виде SQL-запросов.

Этот способ медленнее, чем предыдущий, зато с его помощью можно переносить данные между SQL-серверами разных производителей.

Кроме того, не все данные всегда нужно сохранять. Часто у тебя в таблицах есть куча служебной или устаревшей информации и можно указать SQL-серверу, чтобы он ее не сохранял.

Также для таблиц, которые хранят какие-то события с привязкой ко времени, ты можешь просто делать выборку таких событий за последние сутки и хранить только их.

Различные утилиты. Компании готовы платить кучу денег, чтобы получить гарантию, что их данные останутся в целостности и сохранности. Поэтому различные ИТ-компании начали предлагать решения на все случаи жизни. Например, есть программы, которые могут делать бэкап-базы в виде файлов и при этом не требуют, чтобы эти файлы не менялись.

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

8.2 Создание бэкапа базы данных

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

Workbench Buckup Server Data Export

А теперь добавим немного пояснений:

Workbench Buckup Server Data Export 1

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

  1. Сначала выбираем схему, или схемы, которые будет экспортировать.
  2. Затем справа указываем таблицы для бэкапа.
  3. Дальше мы должны выбрать, что именно мы будет экспортировать:
    • только данные;
    • только структуру (таблицы будет, но пустые);
    • данные и структуру.
  4. Выбираем как данные сохранить:
    • один файл для каждой таблицы;
    • один файл для всех таблиц.
  5. Также ты можешь добавить код по созданию схемы в начало файла. Это удобно при переносе данных между разными СУБД.

8.3 Создание бэкапа схемы таблиц

Давайте создадим бэкап только схемы, без непосредственно данных.

Я выбрал Dump Structure Only и нажал Start Export.

Workbench Buckup Server Data Export 22

И вот что я нашел в файле, который сделал 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 Buckup Server Data Export 2

И вот что я нашел в файле, который сделал 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. Тогда вы увидите такую картинку:

Workbench Buckup Server Data Export 3

Как и в случае с экспортом сначала вам предлагают выбрать источник данных: группа файлов или все данные одним файлом.

Затем нужно выбрать схему, в которую будут заливаться указанные данные. Вы можете выбрать как существующую схему, так и создать новую.

После импорта нужно нажать кнопку обновить 🔄, чтобы увидеть импортированную таблицу/схему.

Workbench Buckup Server Data Export 4

Важно! Если ваш бэкап содержит не только данные, но и описание структуры таблиц, то таблицы будут пересозданы (если таковые уже есть в целевой схеме).