Mysql, проблемы с outfile, простое решение или лучший способ сделать это? - PullRequest
1 голос
/ 24 мая 2010

на данный момент я пишу простой скрипт на ksh, который должен взять некоторые строки из БД и вывести их на оболочку. Вот как это должно работать:

  • Запрос к базе данных для всех данных
  • Экспорт их в текстовый файл
  • Использование awk для отображения разных столбцов

Проблема в том, что два поля таблицы, к которой я обращаюсь, содержат предложения. Очевидно, awk «думает», что пробелы между разными словами являются разделителями между столбцами, поэтому я нашел следующее решение:

  • SELECT * INTO OUTFILE "output" ПОЛЯ, ПРЕКРАЩАЕМЫЕ таблицей ',' FROM
  • Использование awk для вывода результатов (очевидно, теперь разделителем является ',')

Но здесь у меня есть другая проблема, хотя у меня

  • Предоставил привилегию FILE пользователю mysql, которым я пользуюсь
  • дал mysql 777 по каталогу, куда надо написать

Несмотря на это, я получаю следующую ошибку:

'путь': невозможно создать / записать в файл 'файл' (код ошибки: 13)

Разочарованный этим, я начал просматривать веб-страницы, чтобы найти ответ, и нашел "неполный". На определенном сайте они предлагают:

  • chown root: root / tmp

  • chmod 1777 / тпм

  • / etc / init.d / mysqld start

Я подумал, что если это решение отлично работает на / tmp, то не должно быть никаких проблем с любым другим каталогом, который я выберу. Очевидно, я был совершенно неправ :). Если путь, который я указываю для опции outfile, - это / tmp / 'file', то проблем нет, любой другой путь возвращает мне предыдущую ошибку. Так я нашел «решение» проблемы? Ну, да, но чтобы использовать этот скрипт, кто-то должен:

  • У пользователя mysql с привилегией FILE
  • Иметь права на 'rm' файл в / tmp (выходной файл mysql является временным)

И я не думаю, что это мило и мило. Так о чем я тебя спрашиваю? Следующее:

  • Как я могу заставить mysql написать файл, куда я хочу?
  • Есть ли у вас более жизнеспособное и «сладкое» решение, чем мое, чтобы предложить мне?

Ах, я использую Ubuntu 10.4. Спасибо за любую помощь.

1 Ответ

1 голос
/ 24 мая 2010

Лучшее решение - перенаправить вывод:

mysql --default-character-set=utf8 -uuser -ppass -s -e "SELECT * FROM mytable;" > results.txt

Запомните вариант -s:

  -s, --silent        Be more silent. Print results with a tab as separator,
                      each row on new line.
...