Назад | Перейти на главную страницу

mysql не запускается после перемещения каталога данных

У меня есть веб-сервер, на котором по умолчанию mysql размещает все файлы базы данных в /var/lib/mysql. Раздел, где /var установлен, имеет только 2 ГБ пространства, поэтому после запуска в пространстве проблем я решил переместить каталог данных mysql.

Мой наивный подход заключался в том, чтобы скопировать /var/lib/mysql каталог полностью в /web/dbs/mysql, и изменить /etc/mysql/my.cnf так что он читает

datadir = /web/dbs/mysql

Однако после перезапуска я получаю следующие ошибки в журнале ошибок mysql, и сервер не запускается.

130130  9:59:23 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
130130  9:59:23 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130130  9:59:23  InnoDB: Initializing buffer pool, size = 8.0M
130130  9:59:23  InnoDB: Completed initialization of buffer pool
130130  9:59:23  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.

Все файлы и каталоги принадлежат mysql:mysql. Для тестирования даже изменил права доступа на /web/dbs/mysql являются rwxrwxrwx на данный момент.

И да, /web/dbs/mysql/mysql/plugin.frm существует.

В чем может быть проблема? Я что-то упускаю? Доступен ли более подробный журнал вывода?

ОБНОВИТЬ:
Дополнительная информация:
Я повторил все с помощью следующих команд:

Привилегии:

drwxr-xr-x  4 mysql mysql 34   2013-01-30 15:55 /web/dbs
drwx------ 19 mysql mysql 4096 2013-01-30 15:44 /web/dbs/mysql
drwx------  2 mysql mysql 4096 2012-10-11 11:25 /web/dbs/mysql/mysql
-rw-rw----  1 mysql mysql 8586 2012-08-14 19:15 /web/dbs/mysql/mysql/plugin.frm

Когда я сбрасываю datadir на datadir = /var/lib/mysql, сервер запускается без проблем.

Пробовал следующее:

root:/# su - mysql
mysql:~$ /usr/sbin/mysqld --verbose
130130 16:01:05 [Warning] Can't create test file /web/dbs/mysql/s15800994.lower-test
130130 16:01:05 [Warning] Can't create test file /web/dbs/mysql/s15800994.lower-test

mysql:~$ touch /web/dbs/mysql/s15800994.lower-test
mysql:~$ ls -l /web/dbs/mysql/s15800994.lower-test
-rw-r--r-- 1 mysql mysql 0 2013-01-30 16:01 /web/dbs/mysql/s15800994.lower-test

Таким образом, каталог данных настроен правильно. Пользователь mysql имеет доступ на запись, но процесс mysql не может создавать файлы.

Что могло быть не так?

Добавление решения, к которому мы пришли в комментариях, как полный ответ для полноты ...

Тестирование с помощью su / sudo показало, что, хотя mysqld жаловался на ошибки разрешений, пользователь mysql действительно мог успешно писать в папку, что дало понять, что это не проблема разрешения файловой системы. (Полезный первый шаг, если вы столкнулись с подобной проблемой)

Некоторые дистрибутивы Linux (если не все?) Теперь поставляются с AppArmor, который ограничивает файлы / папки, к которым разрешен доступ исполняемым файлам.

Решением в этом случае было просто добавить новый путь к /etc/apparmor.d/usr.sbin.mysqld файл политики.

В случае, если AppArmor не выполняет поиск selinux, потому что в большинстве Linux на основе rpm вы увидите selinux. Просто отключи это.

#setenforce 0
#getenforce

Команда Getenforce даст вам разрешение.