Mysql,outfile 问题,简单的解决方案还是更好的方法?

标签 mysql sql ksh into-outfile

目前我正在用 ksh 编写一个简单的脚本,它应该从数据库中获取一些字符串并将它们列在 shell 中。它应该是这样工作的:

  • 查询数据库中的所有数据
  • 将它们导出到文本文件
  • 使用awk 显示不同的列

问题是我正在查询的表的两个字段包含句子。所以 awk,显然,“认为”不同单词之间的空格是列之间的分隔符,所以我想出了以下解决方案:

  • SELECT * INTO OUTFILE "output"FIELDS TERMINATED BY ',' FROM table
  • 使用 awk 列出结果(显然分隔符现在是 ',')

但是这里我还有另一个问题,虽然我已经

  • 已将 FILE 权限授予我正在使用的 mysql 用户
  • 给mysql 777应该写入的目录

即便如此,我还是收到以下错误:

'path': Can't create/write to file 'file' (Errcode: 13)

对此感到沮丧,我开始上网寻找答案,但我找到了一个“不完整”的答案。在某个网站上,他们建议:

  • chown root:root/tmp

  • chmod 1777/tmp

  • /etc/init.d/mysqld 启动

我认为,如果这个解决方案在/tmp 上运行良好,那么在我选择的任何其他目录上应该没有任何问题。显然我完全错了:)。如果我给 outfile 选项的路径是/tmp/'file' 那么就没有问题,任何其他路径都会返回我之前的错误。那么我是否找到了问题的“解决方案”?嗯,是的,但是要使用这个脚本,某人必须:

  • 拥有一个拥有 FILE 权限的 mysql 用户
  • 有权'rm'/tmp 中的文件(mysql 的输出文件是临时的)

而且我不认为这很甜蜜。那我问你什么?以下内容:

  • 如何强制 mysql 将文件写到我想要的任何地方?
  • 您有没有比我的建议更可行、更“好”的解决方案?

啊,我正在使用 Ubuntu 10.4。 感谢您的帮助。

最佳答案

更好的解决方案是重定向输出:

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.

关于Mysql,outfile 问题,简单的解决方案还是更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2896691/

相关文章:

sql - 是否有替代或更好的方法来连接两个字符串

mysql - 二维 Excel 表转为 CSV 以进行 SQL 插入

shell - 如何使用mailx以文本形式发送文件并向电子邮件正文添加额外文本?

linux - touch 命令不适用于多个文件?

mysql - 限制顾客购买

Mysql Slave最后一个错误和sql线程

php - 对数据库执行计算

PHP PDO : Unable to connect, 目录名称无效

java - 将 SQL 查询存储在简单的日志文件中

bash - extglob 如何与 shell 参数扩展一起工作?