Это сводит меня с ума: я сделал 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)) */;
Ошибка:
ОШИБКА 1 (HY000): невозможно создать / записать в файл '/opt/data/data2/idx_foo/my_precious_table#P#p0#SP#foo0.MYI' (код ошибки: 13)
«Не удается создать / записать в файл» выглядело как проблема с разрешениями для меня, но разрешения для целевых папок выглядят так:
drwxrwxrwx 2 mysql mysql 4096 Dec 1 16:24 data_foo
drwxrwxrwx 2 mysql mysql 4096 Dec 1 16:25 idx_foo
Из-за пинков я пробовал рут-рут: рут и я. Это не решило проблему.
Исходный сервер MySQL версии 5.1.22-rc-log. Целевым сервером является 5.1.29-rc-community. Оба работают на последних установках CentOS.
Редактировать: Немного больше исследований показывает, что Errcode 13 на самом деле является ошибкой прав доступа. Но как я могу получить это на rwxrwxrwx
?
Редактировать: Отличное предложение Билла Карвина не сработало. Я работаю как пользователь root, и у меня установлены все флаги привилегий.
Редактировать: Создание таблицы БЕЗ указания каталогов данных для отдельных разделов работает - но мне нужно поместить эти разделы на больший диск, чем тот, на котором этот экземпляр MySQL по умолчанию создает таблицы. И я не могу просто указать DATA / INDEX DIRECTORY на уровне таблицы - это недопустимо в используемой версии MySQL (5.1.29-rc-community).
Редактировать: Наконец-то нашел ответ, благодаря списку рассылки MySQL и внутреннему ИТ-персоналу. Смотри ниже.