Table of Contents
Изменение местоположения каталога баз данных MySQL
Протестировано на Ubuntu 22.04
В этом руководстве, каталог баз данных будет перемещен на блочное устройство, смонтированное по адресу /mnt/volume-nyc1-01
Перемещение каталога данных MySQL
Прежде чем приступать к перемещению каталога данных MySQL, логично было бы узнать его текущее местоположение. Для этого, запустиминтерактивный сеанс MySQL с учетными данными администратора:
mysql -u root -p
И выполним запрос SELECT
, который вернет активный каталог данных данного экземпляра MySQL:
SELECT @@datadir; +-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.02 sec)
Вывод указывает на то, что MySQL настроен на использование каталога данных по умолчанию – /var/lib/mysql/
. Его, родимого, мы и будем перемещать.
Для сохранения целостности данных, крайне рекомендуется sостановить демон mysql:
sudo systemctl stop mysql # И конечно же надо убедится, что он остановлен sudo systemctl status mysql
Теперь, когда демон mysql выключен, можно скопировать текущий каталог базы данных /var/lib/mysql
в новое место /mnt/volume-nyc1-01
с помощью rsync.
sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01
После завершения команды rsync, переименуем текущую директорию (добавим к имени .bak
), и сохраняем ее до тех пор, пока не убедимся, что перемещение прошло успешно. Переименовав ее, мы избежим путаницы, которая может возникнуть из-за дублирующихся файлов:
sudo mv /var/lib/mysql /var/lib/mysql.bak
Определение нового местоположения данных
MySQL имеет несколько способов переопределения значений конфигурации. По умолчанию значение datadir = /var/lib/mysql
, установлено в файле /etc/mysql/mysql.conf.d/mysqld.cnf
. Отредактируем его:
datadir = /mnt/volume-nyc1-01/mysql
Настройка правил доступа AppArmor
На этом этапе, нужно указать AppArmor разрешить MySQL запись в новую директорию, создав псевдоним между каталогом по умолчанию и новым местоположением. AppArmor – это модуль безопасности в ядре Linux, который позволяет администраторам ограничивать возможности программ с помощью программных профилей, а не пользователей. Начните с редактирования /etc/apparmor.d/tunables/alias
:
... alias /var/lib/mysql/ -> /mnt/volume-nyc1-01/mysql/, ...
Чтобы изменения вступили в силу, перезапустим AppArmor:
sudo systemctl restart apparmor
Перезапуск MySQL
sudo systemctl start mysql sudo systemctl status mysql
Чтобы убедиться, что используется новое местоположение данных, запустим MySQL:
mysql -u root -p
И запросим местоположение хранилища:
SELECT @@datadir; +----------------------------+ | @@datadir | +----------------------------+ | /mnt/volume-nyc1-01/mysql/ | +----------------------------+ 1 row in set (0.00 sec)
После того, когда была проведена проверка целостности любых существующих данных, можно удалить старое хранилище:
sudo rm -Rf /var/lib/mysql.bak
И на всякий случай, снова перезапустим демон:
sudo systemctl restart mysql