Santehnick
24.07.2013 - 13:57
Всем привет, столкнулся с такой проблемой. Нужно именно таким способом создать файл с данными из таблицы mysql. Все делается на домашнем компьютере, с gnu/linux ubuntu. Выполняю в mysql запрос
SELECT * FROM table INTO OUTFILE '/home/user/file'
Получаю ошибку
Цитата |
Can't create/write to file '/home/user/file' (Errcode: 13)
|
Понимаю, что он не может записать/создать файл, но права на /user и даже на /home выставлены следующие
Цитата |
drwxrwxrwx 9 root root 4096 июля 24 13:57 home drwxrwxrwx 9 user user 4096 июля 24 13:57 user |
Но это не помогает, mysql работает под пользователем mysql, пробовал для этих папок менять владельца/группу на mysql, все равно не помогает, при этом без проблем файл создается в /tmp, она имеет следующие права
Цитата |
drwxrwxrwt 16 root root 16384 июля 24 15:27 tmp
|
или если указать относительный путь, то в папке базы данных, по адресу /var/lib/mysql/db тоже файл создается без проблем, а вот если я хочу его сохранить в домашнюю папку пользователя или куда-нибудь в другое место, например в /var/www то не получается, mysql отвечает ошибкой указанной выше, всем папкам я ставил права 777 и назначал пользователя/группу mysql, это не решает проблемы. Кто сталкивался ? может нужно что-то править в my.cnf ? Заранее спасибо, за возможную помощь.
ps ОС Ubuntu 12.10, mysql Ver 14.14 Distrib 5.5.31
Все правильно,потому что команда выполняется под пользователем "mysql" который включает в себя filesystem permissions
Самое быстрое решение это сохранять в /tmp directory, и после чего уже перекидывать куда Вам удобно
Santehnick
25.07.2013 - 11:48
Спасибо, но задача требовала сохранять сразу в нужную директорию, почитал англоязычные ресурсы и нашел следующее объяснение и решение.
Цитата |
Какая это именно версия Ubuntu и это выпуск Ubuntu Server ?
Недавние релизы Ubuntu Server (такие как 10.04) поставляются с AppArmor и MySQL профиль по-умолчанию, мог быть запущен в режиме обеспечения безопасности. Вы можете это проверить, выполнив команду sudo aa-status примерно так:
# sudo aa-status 5 profiles are loaded. 5 profiles are in enforce mode. /usr/lib/connman/scripts/dhclient-script /sbin/dhclient3 /usr/sbin/tcpdump /usr/lib/NetworkManager/nm-dhcp-client.action /usr/sbin/mysqld 0 profiles are in complain mode. 1 processes have profiles defined. 1 processes are in enforce mode : /usr/sbin/mysqld (1089) 0 processes are in complain mode.
Если mysqld включен в режиме безопасности, тогда это вероятно единственная причина отказа в записи. Сообщения также будут записаны в /var/log/messages, когда AppArmor блокирует запись/доступ. Вы можете изменить /etc/apparmor.d/usr.sbin.mysqld и добавить /data/ и /data/* чуть ниже, примерно таким образом:
... /usr/sbin/mysqld { ... /var/log/mysql/ r, /var/log/mysql/* rw, /var/run/mysqld/mysqld.pid w, /var/run/mysqld/mysqld.sock w, /data/ r, /data/* rw, }
И перезапустить AppArmor
# sudo /etc/init.d/apparmor reload
ПРЕДУПРЕЖДЕНИЕ: Изменения выше позволят MySQL читать и записывать директорию /data. Мы надеемя, вы уже осознаете последствия этого для безопасности.
|
Правда логи AppArmor у меня пишутся в системный журнал, /var/log/syslog (Ubuntu 12.10)
Взято здесь. Пусть теперь будет и в рунете ответ.