这是让我有种疯狂:我做了一个快照的一个分区的表上的一个服务器、移动所得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/数据/2/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

踢,我已经试过乔宁根:根和我自己。这并没有解决这个问题。

源MySQL server version5.1.22-rc-日志。目的服务器5.1.29-rc-社区。两个正在运行的最近CentOS设施。

编辑: 一个小小的更多的研究显示,Errcode13实际上是一个权限的错误。但我怎么能得到那上 rwxrwxrwx?

编辑: 法案Karwin是很好的建议没有成功。我的工作为根户,并有所有权标志的设置。

编辑: 创建该表没有指定数据目录对各个分区的工作-但是我需要把这些分区在更大的磁盘上的一个在这MySQL实例使表的默认。我不能只指定的数据/索引目录表级别的-那是不合法的,在该版本的MySQL我使用(5.1.29-rc-共同体)。

编辑: 终于遇到了答复,感谢MySQL的邮件列表和内部就工作人员。见下文。

有帮助吗?

解决方案 3

它竟然是如何的问题-我的所有文件系统的权限,都很好,但有一个高级别政策对MySQL访问,盘的分区。

教训:当你有一个权限问题,但所有权和文件系统的权限显然是正确的,看看如何.

其他提示

Ubuntu 看看 apparmor 设置mysql

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

这应该可以解决的许可问题。对于一个快速测试你甚至可以试试

/etc/init.d/apparmor stop

但是不要忘记,重新启动服务。

这花了我一些时间才能体现出来。和之后的"如何"很显然,我忘记了这种新的保护Ubuntu。

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

你还会收到一条错误消息 MySQL user ID运行查询 没有"的数据文件"的权限 这允许用户ID写到 本文件系统。

换句话说,它可以是一个权限问题与相对于SQL特权,不是操作系统的文件的权限。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top