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
. Тогда вы увидите такую картинку:

Как и в случае с экспортом сначала вам предлагают выбрать источник данных: группа файлов или все данные одним файлом.
Затем нужно выбрать схему, в которую будут заливаться указанные данные. Вы можете выбрать как существующую схему, так и создать новую.
Важно! Если ваш бэкап содержит не только данные, но и описание структуры таблиц, то таблицы будут пересозданы (если таковые уже есть в целевой схеме).
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ