MySQL“SELECT INTO OUTFILE”因 CIFS 挂载卷而失败

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=****

由于-T可以mysqldump利用它,有什么选择(MySQL/CIFS)需要为了SELECT INTO OUTFILE工作我的互联网金融-挂载目录?

更新:

有趣的是,正如 Michael 所说,其中一个strace过程mysqld确实揭示了访问控制失败。但我仍然不知道为什么。以相同的方式启动的简单 Perl 脚本mysql可以毫无问题地调用相同的系统调用。

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请注意,每次运行之前都会清空该目录。

答案1

事实上问题是应用装甲

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

答案2

该错误可能意味着两种情况之一,该文件可能已经存在,或者实际上是权限问题(尽管您的示例显示它不是权限问题,但我相信它实际上是)。

此外,当您使用“-”选项运行“su”来模拟其环境时,您需要将其指定为 su 的最后一个选项。

相关内容