【问题标题】:Mysql,issues with into outfile, an easy solution or a better way to do it?Mysql,into outfile的问题,一个简单的解决方案还是更好的方法?
【发布时间】:2011-02-23 05:05:32
【问题描述】:

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

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

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

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

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

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

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

“路径”:无法创建/写入文件“文件”(错误代码: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 sql ksh into-outfile


    【解决方案1】:

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

    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.
    

    【讨论】:

    • 我可以将 tab 定义为 awk 的分隔符吗?制表符是读作一组空格还是读作完全不同的字符?
    • @Abaco:顺便问一下,为什么需要 awk 来显示不同的列?为什么不在 MySQL 中定义所有你?
    • 因为我需要以一定的顺序和一些标点符号来显示不同的字段。例如:$ 号码。 Field1\n Field2/Field3\t Field4:Field5\n Field6 awk 是我想出的最佳解决方案。
    • @Abaco:你可以在 MySQL 中做同样的事情:SELECT CONCAT(Field1,'\n',Field2,'/',Field3,'\t',Field4,':',Field5,'\n',Field6) ...
    • 哦,我真的不知道这个。好吧,我学到了另一件事。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2010-12-28
    相关资源
    最近更新 更多