[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: INTO OUTFILE /home
Santehnick
Всем привет, столкнулся с такой проблемой. Нужно именно таким способом создать файл с данными из таблицы 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
Oyeme
Все правильно,потому что команда выполняется под пользователем "mysql" который включает в себя filesystem permissions

Самое быстрое решение это сохранять в /tmp directory, и после чего уже перекидывать куда Вам удобно
Santehnick
Спасибо, но задача требовала сохранять сразу в нужную директорию, почитал англоязычные ресурсы и нашел следующее объяснение и решение.

Цитата

Какая это именно версия 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)

Взято здесь. Пусть теперь будет и в рунете ответ.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.