MySQL“SELECT INTO OUTFILE”在安装了CIFS的卷上失败

SELECT INTO OUTFILE对于挂载CIFS的目录( /mnt/backup/test )将失败,但对于普通目录( /tmp/tests )有效。

 mysql> select * from mytable into outfile '/tmp/tests/mytable.txt'; Query OK, 3723 rows affected (0.05 sec) mysql> select * from mytable into outfile '/mnt/backup/test/mytable.txt'; ERROR 1 (HY000): Can't create/write to file '/mnt/backup/test/mytable.txt' (Errcode: 2) 

mysql用户写入/mnt/backup/test/mytable.txt没有问题:

 root:~# su - -s /bin/bash mysql mysql:~$ touch /mnt/backup/test/mytable.txt mysql:~$ ls -l /mnt/backup/test/mytable.txt -rw-r--r-- 1 root root 0 2009-11-16 10:48 /mnt/backup/test/mytable.txt 

CIFS目录/mnt/backup使用: rw,noperm,user=****,password=****

由于mysqldump-T选项使用它, SELECT INTO OUTFILE 需要 哪些选项 (Mysql / CIFS)来处理我的CIFS安装的目录?

更新:

有趣的是,迈克尔认为, mysqld进程的一strace确实揭示了访问控制的失败。 但我仍然不知道为什么 。 以mysql启动的简单Perl脚本调用相同的系统调用,没有任何问题。

mysqld strace的解压

 open("/mnt/backup/tests/bugs.1.txt", O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0666) = -1 EACCES (Permission denied) 

perl strace的提取

 open("/mnt/backup/tests/bugs.32064.txt", O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0666) = 3 

请注意,每次运行之前,目录/mnt/backup/tests都已清空。

其实问题是AppArmor 。

/mnt/backup/** w/etc/apparmor.d/usr.sbin.mysqld并重新启动( /etc/init.d/apparmor restart )解决了这个问题。

该错误可能意味着两件事之一,该文件可能已经存在,或者实际上是一个权限问题(尽pipe你的例子显示它不是一个权限问题,我相信它实际上是)。

另外,当用' – '选项运行'su'来模拟它们的环境时,你需要指定这个作为su的最后一个选项。