Назад | Перейти на главную страницу

MySQL «ВЫБРАТЬ В 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 работать с участием мой CIFSсмонтированный каталог?

Обновить:

Интересно, что 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 опорожнялся перед каждым запуском.

На самом деле проблема была AppArmor.

Добавление /mnt/backup/** w к /etc/apparmor.d/usr.sbin.mysqld и перезапустив его (/etc/init.d/apparmor restart) решил проблему.

Эта ошибка может означать одно из двух: файл может уже существовать или это на самом деле проблема с разрешениями (несмотря на то, что ваш пример показывает, что это не проблема с разрешением, я считаю, что это действительно так).

Кроме того, когда вы запускаете su с опцией «-» для имитации их среды, вам необходимо указать это в качестве последней опции su.