Сегодня у нас простой кейс. Есть резервная копия БД MySQL 8 в виде файла SQL. База крутилась раньше на сервере Windows. Необходимо выполните восстановление базы данных на сервере с ОС Ubuntu Server 22.04 и СУБД MariaDB 10.
Сперва нам нужно перенести файлик резервной копии SQL на сервер, на котором будем выполнять восстановление. WinSCP в помощь.
Файл internet-lab.sql скопировался в домашнюю директорию пользователя.
Файл создаётся от имени пользователя, под которым логинились. В зависимости от того, как принято в вашей инфраструктуре, следует дать права на файл тому пользователю, под которым будем выполнять восстановление. У меня всё просто, я буду выполнять восстановление от рута, но для наглядности тоже сменю права.
cd /home/ovel
chown root\: ./internet-lab.sql
Восстанавливать базу будем в консоли. Входим в командную оболочку mysql, нужно будет указать пароль.
mysql -u root -p
Создаём базу данных и пользователя.
CREATE DATABASE `internet-lab` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE USER 'ilab'@'localhost' identified by 'set_your_password';
GRANT ALL PRIVILEGES ON `internet-lab`.* TO `ilab`@localhost;
\q
Перед тем как приступить непосредственно к восстановлению, проверим файл SQL. Формат SQL представляет из себя набор TSQL инструкций, которые выполняют создание таблиц, индексов и загрузку данных. Если в SQL файле есть инструкция USE <имя базы>, то восстановление будет производиться в ту базу, которая указана в данной инструкции.
Поискал по файлу, инструкции USE нет. Если бы была, я бы её закомментировал.
Восстановим базу, выполняем в UNIX-shell:
mysql -u root -p internet-lab < /home/ovel/internet-lab.sql
При отсутствии инструкции USE восстановление будет производиться в указанную в команде базу.
База восстановлена.
Проверим размер базы:
mysql -u root -p
SELECT table_schema "DB Name",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;