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

Перемещение базы данных MySQL 8 в Ubuntu 20.04 LTS

MySQL 8

База данных MySQL 8 при установке на Ubuntu 20 по умолчанию пишется в папку /var/lib/mysql. Со временем база растёт и поднимается вопрос переноса её на другой раздел диска. Перенесём базу данных в /u01/mysql/mysql.

Требования

  • ОС Ubuntu 20.04 LTS. Или 18.04 LTS. Или Ubuntu 16.04.
  • Работаем из-под root.
  • Сервер MySQL 8
  • Есть папка /u01
    cd /
    mkdir u01

Подготовка

Проверим где находится текущая БД MySQL.

mysql -u root -p
select @@datadir;

sql

Видим, что файлы базы находятся в /var/lib/mysql/. Чтобы закрыть командную строку MySQL, введите exit.

exit

Останавливаем сервер MySQL:

systemctl stop mysql

Проверяем статус, мы должны убедиться, что сервер MySQL остановлен:

systemctl status mysql

sql

Видим — Status: "Server shutdown complete".

Перемещаем каталог данных MySQL

Создадим папку /u01/mysql, в неё будем переносить папку с данными MySQL.

cd /u01
mkdir mysql

С помощью rsync переносим MySQL в другую папку:

rsync -av /var/lib/mysql /u01/mysql

Флаг –a сохраняет привилегии и другие свойства каталога. Флаг –v предоставляет подробный вывод. Теперь внимание, папка /var/lib/mysql теперь находится по адресу /u01/mysql/mysql.

sql

Переименуем старую папку /var/lib/mysql, сохраним её на случай сбоя:

mv /var/lib/mysql /var/lib/mysql.bak

По умолчанию путь настроен в файле /etc/mysql/mysql.conf.d/mysqld.cnf, редактируем.

vim /etc/mysql/mysql.conf.d/mysqld.cnf

Найдите строку datadir= и укажите в ней путь к новому каталогу данных /u01/mysql/mysql.

sql

AppArmor

Настроим AppArmor, чтобы предоставить MySQL право на изменение нового каталога. Редактируем файл /etc/apparmor.d/tunables/alias:

vim /etc/apparmor.d/tunables/alias

Добавим правило:

alias /var/lib/mysql/ -> /u01/mysql/mysql/,

sql

Перезапустим AppArmor:

systemctl restart apparmor

Если этого не сделать, то получим ошибку при запуске MySQL:

Failed to start MySQL Community Server

Перезапуск MySQL

MySQL при запуске проверяет наличие директории /var/lib/mysql/mysql (ЗАЧЕМ?). Чтобы он не ругался, создадим пустую папку:

mkdir /var/lib/mysql/mysql -p

Запускаем MySQL:

systemctl start mysql
systemctl status mysql

sql

Проверяем текущий путь:

mysql -u root -p
select @@datadir;

sql

Путь теперь /u01/mysql/mysql/.

Удаление ненужных файлов

rm -R /var/lib/mysql.bak

Теги

 

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

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

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

Теги