Проблема с разрешениями MySQL - не должно быть проблемой

Это сводит меня с ума: я сделал mysqldump для секционированной таблицы на одном сервере, переместил полученный дамп SQL на другой сервер и попытался запустить вставку. Это не удается, но мне трудно понять, почему. Google, форумы и документы MySQL не очень помогли.

Неудачный запрос выглядит следующим образом (сокращен для краткости и ясности, имена изменены, чтобы защитить невиновных):

CREATE TABLE `my_precious_table` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `somedata` varchar(20) NOT NULL,
 `aTimeStamp` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
 PRIMARY KEY (`id`,`aTimeStamp`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/opt/data/data2/data_foo/' INDEX DIRECTORY='/opt/data/data2/idx_foo/' 
/*!50100 PARTITION BY RANGE (year(aTimeStamp)) SUBPARTITION BY HASH ( TO_DAYS(aTimeStamp)) 
(PARTITION p0 VALUES LESS THAN (2007) (SUBPARTITION foo0 DATA DIRECTORY = '/opt/data/data2/data_foo' INDEX DIRECTORY = '/opt/data/data2/idx_foo' ENGINE = MyISAM), 
PARTITION p1 VALUES LESS THAN (2008) (SUBPARTITION foo1 DATA DIRECTORY = '/opt/data/data2/data_foo' INDEX DIRECTORY = '/opt/data/data2/idx_foo' ENGINE = MyISAM), 
PARTITION p2 VALUES LESS THAN (2009) (SUBPARTITION foo2 DATA DIRECTORY = '/opt/data/data2/data_foo' INDEX DIRECTORY = '/opt/data/data2/idx_foo' ENGINE = MyISAM), 
PARTITION p3 VALUES LESS THAN MAXVALUE (SUBPARTITION foo3 DATA DIRECTORY = '/opt/data/data2/data_foo' INDEX DIRECTORY = '/opt/data/data2/idx_foo' ENGINE = MyISAM)) */;

Ошибка:

ERROR 1 (HY000): Can't create/write to file '/opt/data/data2/idx_foo/my_precious_table#P#p0#SP#foo0.MYI' (Errcode: 13)

«Невозможно создать / записать в файл» для меня выглядело проблемой с разрешениями, но разрешения для целевых папок выглядят следующим образом:

drwxrwxrwx 2 mysql mysql 4096 Dec  1 16:24 data_foo
drwxrwxrwx 2 mysql mysql 4096 Dec  1 16:25 idx_foo

Для удовольствия я пробовал использовать root: root и себя. Это не устранило проблему.

Исходный сервер MySQL - это версия 5.1.22-rc-log. Целевой сервер - 5.1.29-rc-community. Оба работают на последних установках CentOS.

Редактировать: Еще немного исследований показывает, что код ошибки 13 на самом деле является ошибкой прав доступа. Но как я могу получить это на rwxrwxrwx?

Редактировать: Превосходное предложение Билла Карвина не оправдалось. Я работаю как пользователь root, и у меня установлены все флаги привилегий.

Редактировать: Создание таблицы БЕЗ указания каталогов данных для отдельных разделов работает, но мне нужно разместить эти разделы на диске большего размера, чем тот, на котором этот экземпляр MySQL помещает таблицы по умолчанию. И я не могу просто указать DATA / INDEX DIRECTORY на уровне таблицы - это недопустимо в версии MySQL, которую я использую (5.1.29-rc-community).

Редактировать: Наконец-то нашел ответ благодаря списку рассылки MySQL и внутреннему ИТ-персоналу. См. ниже.

Вы уверены, что путь правильный?

Eran Galperin 02.12.2008 01:26

да. Проверял не раз.

bradheintz 02.12.2008 01:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
2
2 506
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

http://bugs.mysql.com/bug.php?id=19557

You will also receive an error message of the MySQL user ID running the query does not have "DATA FILE" privileges that allows the user ID to write to the file system.

Другими словами, это может быть проблема разрешений в отношении привилегий SQL, а не разрешений файлов операционной системы.

Спасибо. Я работаю как root, и быстрая проверка таблицы USER показывает, что у меня все права (включая File_priv) установлены в значение true. Кроме того, привилегия FILE (ее нет под названием DATA FILE) позволяет использовать операторы LOAD DATA INFILE и SELECT ... INTO OUTFILE - отдельная проблема от создания таблицы.

bradheintz 02.12.2008 01:53

Хорошо, доки, хорошо бы исключить такую ​​возможность. Но я не уверен, что еще предложить.

Bill Karwin 02.12.2008 02:11
Ответ принят как подходящий

Оказалось, что это проблема SElinux - все мои разрешения файловой системы были в порядке, но была установлена ​​политика более высокого уровня против доступа MySQL к этому разделу диска.

Урок: если у вас есть проблема с разрешениями, но права собственности и разрешения файловой системы, очевидно, правильны, обратитесь к SElinux.

Я быстро прихожу к мнению, что первое, что нужно сделать в любой системе Linux, - это setenforce 0.

Bill Karwin 30.08.2011 21:41

На Ubuntu посмотрите настройки Apparmor для mysql

vi /etc/apparmor.d/usr.sbin.mysql

Это должно решить проблемы с разрешениями. Для быстрого теста вы даже можете попробовать

/etc/init.d/apparmor stop

Но не забудьте перезапустить службу.

Мне потребовалось некоторое время, чтобы понять. И после прочтения «SELinux» стало ясно, что я забыл об этом новом виде защиты в Ubuntu.

Другие вопросы по теме