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

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

MySQL 8

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

Требования

  • ОС Ubuntu 18.04 LTS. Или Ubuntu 16.04.
  • Работаем из-под root.
  • Сервер MySQL 8

Подготовка

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

mysql -u root -p
select @@datadir;

mysql

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

exit

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

systemctl stop mysql

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

systemctl status mysql

mysql

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

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

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

mysql

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

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

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

mysql

Переименуем старую папку /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.

mysql

AppArmor

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

vim /etc/apparmor.d/tunables/alias

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

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

mysql

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

systemctl restart apparmor

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

mysql

Перезапуск MySQL

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

mkdir /var/lib/mysql/mysql -p

Запускаем MySQL:

systemctl start mysql
systemctl status mysql

mysql

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

mysql -u root -p
select @@datadir;

mysql 

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

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

rm -R /var/lib/mysql.bak

 

Теги