База данных 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;
Видим, что файлы базы находятся в /var/lib/mysql/. Чтобы закрыть командную строку MySQL, введите exit.
exit
Останавливаем сервер MySQL:
systemctl stop mysql
Проверяем статус, мы должны убедиться, что сервер MySQL остановлен:
systemctl status mysql
Видим — 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.
Переименуем старую папку /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.
AppArmor
Настроим AppArmor, чтобы предоставить MySQL право на изменение нового каталога. Редактируем файл /etc/apparmor.d/tunables/alias:
vim /etc/apparmor.d/tunables/alias
Добавим правило:
alias /var/lib/mysql/ -> /u01/mysql/mysql/,
Перезапустим 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
Проверяем текущий путь:
mysql -u root -p
select @@datadir;
Путь теперь /u01/mysql/mysql/.
Удаление ненужных файлов
rm -R /var/lib/mysql.bak