Перенос MySQL в другую папку/раздел на Debian/Ubuntu
Недавно мне пришлось переместить данные MySQL в другую папку(а точнее на другой раздел) на Debian Linux 5.0.3.
Логично, что простым переносом файлов тут не отделаешься, надо что-то где-то прописать.
По-умолчанию данные MySQL лежат в /var/lib/mysql. Мне захотелось, чтобы они были в /home/mysql. Переносим папку mysql куда нам нужно, затем лезем в конфиг MySQL (/etc/mysql/my.cnf).
Там есть опция:
datadir = /var/lib/mysql |
Вот её мы заменяем на следующее:
datadir = /home/mysql |
Пробуем перезапустить наш MySQL сервер (/etc/init.d/mysql restart) и в итоге у нас ничего не запускается.
Смотрим tail /var/log/messages и видим приблизительно такое:
kernel: [ 2714.258037] audit(1227462526.718:13): type=1503 operation="inode_create" requested_mask="w::" denied_mask="w::" name="/home/mysql/yii.test" pid=19659 profile="/usr/sbin/mysqld" namespace="default" kernel: [ 2714.310572] audit(1227462526.770:14): type=1503 operation="inode_permission" requested_mask="rw::" denied_mask="rw::" name="/home/mysql/ibdata1" pid=19659 profile="/usr/sbin/mysqld" namespace="default" |
Это нам говорит о том, что политика AppArmor запрещает всякие манипуляции мусклу в новой папке. И это естественно, ведь AppArmor думает, что базы лежат всё там же, в /var/lib/mysql.
Значит надо переписать конфиг AppArmor. Открываем и редактируем /etc/apparmor.d/usr.sbin.mysqld . В нём меняем всё, где упоминается /var/lib/mysql на /home/mysql. Затем перезапускаем AppArmor и MySQL:
sudo service apparmor restart sudo /etc/init.d/mysql restart |
И у нас всё работает! Такая же схема для Ubuntu.