Перейти к основному содержанию

Восстановление базы MySQL из резервной копии

MySQL 8

Сегодня у нас простой кейс. Есть резервная копия БД MySQL 8 в виде файла SQL. База крутилась раньше на сервере Windows. Необходимо выполните восстановление базы данных на сервере с ОС Ubuntu Server 22.04 и СУБД MariaDB 10.

Сперва нам нужно перенести файлик резервной копии SQL на сервер, на котором будем выполнять восстановление. WinSCP в помощь.

sql

Файл internet-lab.sql скопировался в домашнюю директорию пользователя.

sql

Файл создаётся от имени пользователя, под которым логинились. В зависимости от того, как принято в вашей инфраструктуре, следует дать права на файл тому пользователю, под которым будем выполнять восстановление. У меня всё просто, я буду выполнять восстановление от рута, но для наглядности тоже сменю права.

cd /home/ovel
chown root\: ./internet-lab.sql

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. Формат SQL представляет из себя набор TSQL инструкций, которые выполняют создание таблиц, индексов и загрузку данных. Если в SQL файле есть инструкция USE <имя базы>, то восстановление будет производиться в ту базу, которая указана в данной инструкции.

sql

Поискал по файлу, инструкции USE нет. Если бы была, я бы её закомментировал.

Восстановим базу, выполняем в UNIX-shell:

mysql -u root -p internet-lab < /home/ovel/internet-lab.sql

При отсутствии инструкции USE восстановление будет производиться в указанную в команде базу.

sql

База восстановлена.

Проверим размер базы:

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;

sql

Теги

 

Похожие материалы