Перемещение каталога данных MySQL с помощью символьной ссылки
mySQL, Ubuntu | Комментировать запись
Объём базы данных увеличивается, и со временем она исчерпывает пространство файловой системы. Кроме того, если ввод и вывод находится на одном разделе с остальной частью операционной системы, возможные конфликты доступа к устройствам ввода/вывода. 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: AppArmor, MySQL, Ubuntu 16.04