Войти

Недавно мне пришлось переместить данные 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.

2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Сергей

    а если нет в файле /etc/apparmor.d/usr.sbin.mysqld строк /var/lib/mysql ?

    18 января 2010 at 19:53
  2. Bethrezen

    @Сергей: я смотрю ты и на форуме этот вопрос задавал :-)

    1 апреля 2010 at 14:15

Some HTML is OK