zaLinux.ru

Как переместить директорию с данными MySQL/MariaDB в новое расположение на Ubuntu 16.10 или 17.04


Со временем базы данных растут, иногда перерастая место на файловой системе. Не важно, хотите ли вы использовать более просторное хранилище под базу данных, или использовать RAID, сетевые блочные устройства или разместить базы данных на другом диске, а не на котором расположена основная система, данная инструкция проведёт вас по процессу смены расположения директории data вашей СУБД MySQL.

Шаг 1 — Перемещение директории Data MySQL

Подготавливаясь для перемещения директории MySQL data, давайте проверим текущее расположения, для этого запустите интерактивную сессию MySQL с учётными данными администратора.

mysql -u root -p

Когда появится запрос, введите пароль рута MySQL. Затем в приглашении MySQL выполните запрос для показа текущего расположения директории data:

select @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

Этот вывод подтверждает, что MySQL настроена на использование директории data по умолчанию, /var/lib/mysql/, т.е. эту директорию нам и нужно перемещать. После подтверждения этого, напечатайте exit; для выхода.

Чтобы быть уверенными в целостности данных, вы отключим MySQL перед тем, как начнём делать наши изменения:

sudo systemctl stop mysql

systemctl не показывает результат выполнения команды управления сервисом, поэтому если вы хотите убедиться, что всё прошло успешно, используйте следующую команду:

sudo systemctl status mysql

Теперь, когда сервер отключён, мы скопируем с rsync существующую директорию с базой данных в новое расположение. Использование флага -a сохраняет права доступа и другие свойства каталога, -v обеспечивает вербальный вывод, поэтому вы можете следить за прогрессом.

Внимание: убедитесь, что отсутствуют завершающие слеши после имён директорий, они могут появиться при использовании автозавершения по tab. Когда присутствует завершающий слеш, rsync сбросит содержимое директории в точку монтирования вместо перенесения директории mysql.

sudo rsync -av /var/lib/mysql /home/mial

Когда rsync закончит, переименуйте текущую папку, добавив к её имени расширение .bak и сохраните её до тех пор, пока не подтвердится, что перемещение было успешным. Переименовывая папку, мы с одной стороны убедимся, что сервер точно работает с новым расположением, при этом мы сохраним резервную копию на случай, если что-то пошло не так:

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

Теперь мы готовы переключиться на настройку.

Шаг 2 — Указание на новое расположение Data

MySQL имеет несколько способов переписать значения конфигурации. В зависимости от того, используете ли вы MySQL или MariaDB расположение и название конфигурационных файлов может различаться. Например, для MySQL это файл /etc/mysql/mysql.conf.d/mysqld.cnf

Откройте его:

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

 Отредактируйте этот файл в соответствии с вашей новой директорией data. Найдите строку, которая начинается с datadir= и измените на путь, который соответствует новому расположению. В моём случае (новой директорией является /home/mial/mysql/) обновлённая строка выглядит так:

datadir         = /home/mial/mysql

Эта строка расположена в секции [mysqld].

Если вы используете MariaDB, то отредактируйте, например, файл /etc/mysql/mariadb.conf.d/50-server.cnf:


sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

В нём также после секции [mysqld] можно изменить значение datadir. Ещё обратите внимание для секции [mariadb] – значения, вписанные здесь, будут распространяться только на MariaDB, и на секцию [mariadb-10.0] – опции, указанные в ней, будут влиять только на MariaDB десятой версии.

[mariadb]
datadir         = /home/mial/mysql
# ИЛИ
[mariadb-10.0]
datadir         = /home/mial/mysql

Казалось бы, уже пора снова поднимать MySQL, но нам ещё нужно кое-что настроить перед тем, как мы успешно сможем это сделать.

Шаг 3 — Настройка правил контроля доступа AppArmor

Нам нужно сообщить AppArmor, чтобы он разрешил MySQL записывать в новую директорию. Это будет сделано посредством создания псевдонима между директорией по умолчанию и новым расположением. Чтобы сделать это, отредактируйте файл псевдонимов AppArmor:

sudo vim /etc/apparmor.d/tunables/alias

В конце этого файла добавьте следующее правило псевдонимов:

alias /var/lib/mysql/ -> /home/mial/mysql/,

Чтобы изменения вступили в силу, перезапустите AppArmor:


sudo systemctl restart apparmor

Примечание: если вы пропустите шаг настройки AppArmor вы придёте к следующему сообщению об ошибке:

Job for mysql.service failed because the control process 
exited with error code. See "systemctl status mysql.service" 
and "journalctl -xe" for details.

Вывод для systemctl и journalctl заканчивается:

Jul 18 11:03:24 ubuntu-512mb-nyc1-01 systemd[1]: 
mysql.service: Main process exited, code=exited, status=1/FAILURE

Поскольку сообщение не приносит ясности о связи между AppArmor и директорией data, на решение этой ошибки можно потерять время.

Шаг 4 — Перезапуск MySQL

Теперь мы готовы запустить MySQL.

sudo systemctl start mysql
sudo systemctl status mysql

Чтобы убедиться, что новая директория data действительно используется, зайдите в MySQL:

mysql -u root -p

И снова чтобы увидеть информацию о директории data введите:

select @@datadir;
+-------------------+
| @@datadir         |
+-------------------+
| /home/mial/mysql/ |
+-------------------+
1 row in set (0.00 sec)

Примечание: если значение не изменилось, то попробуйте перезапустить весь сервер, а не только службу MySQL.

Теперь, когда мы перезапустили MySQL и подтвердили, что используется новое расположение, воспользуйтесь возможностью убедиться, что ваша база данных полностью функционально. После того, как вы удостоверились в целостности всех существующих данных, вы можете удалить резервную копию директории data:

sudo rm -rf /var/lib/mysql.bak

Перезапустите MySQL последний раз, чтобы проверить, что всё работает как и ожидалось:


sudo systemctl restart mysql
sudo systemctl status mysql

Создание символической ссылки на директорию данных MySQL

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

sudo mv /var/lib/mysql /путь/до/mysql

Далее создаём символическую ссылку:

sudo ln -s /путь/до/mysql /var/lib/mysql

Заключение

В этой инструкции мы переместили директорию MySQL с базами данных data в новое расположение и обновили правила контроля доступа AppArmor в Ubuntu для соответствия изменениям.


Рекомендуемые статьи:

1 Комментарий

  1. TvT

    Отличный, доступный для понимания и 100% рабочий пост! =b

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *