这让我有点疯狂:我在一台服务器上做了一个分区表的mysqldump,将生成的SQL转储移动到另一台服务器,并尝试运行插入.它失败了,但我很难搞清楚原因.谷歌和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
对于踢,我已经尝试过chowning root:root和我自己.这并没有解决问题.
源MySQL服务器是版本5.1.22-rc-log.目标服务器是5.1.29-rc-community.两者都在最近的CentOS安装上运行.
编辑: 更多的研究表明,Errcode 13实际上是一个权限错误.但是我该怎么做rwxrwxrwx
呢?
编辑: 比尔卡文的出色建议没有成功.我以root用户身份工作,并设置了所有权限标志.
编辑: 创建表没有指定各个分区的数据目录 - 但我需要将这些分区放在比默认情况下此MySQL实例放置表的磁盘更大的磁盘上.我不能只在表级指定DATA/INDEX目录 - 这在我使用的MySQL版本中是不合法的(5.1.29-rc-community).
编辑:最后得到了答案,感谢MySQL邮件列表和内部IT人员.见下文.