Перемещение каталога данных MySQL с помощью символьной ссылки

Объём базы данных увеличивается, и со временем она исчерпывает пространство файловой системы. Кроме того, если ввод и вывод находится на одном разделе с остальной частью операционной системы, возможные конфликты доступа к устройствам ввода/вывода. RAID, сетевые блочные хранилища и другие устройства предоставляют избыточность данных и другие полезные функции. Если вы хотите добавить больше места и оптимизировать производительность, а также воспользоваться другими функциями хранения, это руководство поможет вам переместить каталог данных MySQL.

Инструкции данного руководства подойдут для серверов с одним экземпляром MySQL.

Примечание: Если у вас несколько экземпляров MySQL, читайте руководство Перемещение каталога данных MySQL в Ubuntu 16.04.

Требования

  • Сервер Ubuntu 16.04 (инструкции по настройке сервера можно найти здесь).
  • Не-root пользователь с доступом к sudo.
  • Сервер MySQL (чтобы установить MySQL, следуйте специальному разделу этого руководства).
  • Бэкап данных. Создайте резервную копию данных, чтобы иметь возможность восстановить их, если при перемещении каталога произойдёт ошибка. Подробнее о резервном копировании – здесь.

В данном руководстве показано, как переместить данные в блочное хранилище, смонтированное в mnt/volume-nyc1-01. Это поможет вам переместить каталог данных в новое место независимо от того, какое хранилище вы используете.

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

Чтобы обеспечить целостность данных, отключите MySQL:

sudo systemctl stop mysql

Утилита systemctl не отображает результаты команд управления сервисами. Чтобы убедиться в том, что сервер MySQL отключен, используйте следующую команду:

sudo systemctl status mysql

Если сервис отключен, в конце вывода вы увидите строку:

. . .
Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.

Теперь можно переместить текущий каталог данных в новое место.

sudo mv /var/lib/mysql /mnt/volume-nyc1-01/mysql

Создайте символьную ссылку:

sudo ln -s /mnt/volume-nyc1-01/mysql /var/lib/mysql

Теперь нужно настроить AppArmor, чтобы предоставить MySQL право на изменение нового каталога. Для этого нужно создать алиас между стандартным и новым каталогом.

2: Настройка AppArmor

Переместив каталог MySQL в другую файловую систему, нужно создать алиас AppArmor.

Для этого отредактируйте файл alias:

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

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

. . .
alias /var/lib/mysql/ -> /mnt/volume-nyc1-01/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 и каталогом данных, у вас может уйти некоторое время на то, чтобы выяснить источник проблемы. Некоторые данные об ошибке содержатся в syslog:

sudo tail /var/log/syslog
Nov 24 00:03:40 digitalocean kernel:
[  437.735748] audit: type=1400 audit(1479945820.037:20):
apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld"
name="/mnt/volume-nyc1-01/mysql/mysql.lower-test" pid=4228
comm="mysqld" requested_mask="c" denied_mask="c" fsuid=112 ouid=112

Теперь можно запустить MySQL:

sudo systemctl start mysql
sudo systemctl status mysql

Перезапустив MySQL, убедитесь, что при перемещении данные не пострадали и что MySQL работает должным образом.

Заключение

Теперь вы умеете перемещать каталог данных MySQL при помощи символьных ссылок и обновлять настройки сервера и модуля AppArmor. В данном руководстве использовалось блочное хранилище, однако эти инструкции подходят для настройки любого устройства независимо от технологии, на которой оно основано.

Обратите внимание: если у вас больше одного экземпляра MySQL, этот метод не стработает.

Читайте также: Перемещение каталога данных MySQL в Ubuntu 16.04

Tags: , ,

Добавить комментарий