代码之家  ›  专栏  ›  技术社区  ›  Andy

MySQL选择输入输出文件/tmp无输出

  •  14
  • Andy  · 技术社区  · 17 年前

    我无法获取以下代码以生成任何输出。MySQL用户具有“all”授权级别,/tmp是可写的,查询返回一个结果集。

    mysql> SELECT field FROM test_table WHERE condition='test'
        -> INTO OUTFILE '/tmp/test.csv'
        -> FIELDS TERMINATED BY ','
        -> ENCLOSED BY '"'
        -> LINES TERMINATED BY '\n';
    Query OK, 1 row affected (0.00 sec)
    
    mysql>
    [1]+  Stopped                 mysql
    [root@web1 ~]# cat /tmp/test.csv
    cat: /tmp/test.csv: No such file or directory
    

    如果出现故障,我应该看到MySQL的不同输出吗?

    我是否可以进一步验证“1行受影响”以外的结果?

    3 回复  |  直到 13 年前
        1
  •  18
  •   Teun Zengerink Dhiraj Thakur    13 年前

    outfile子句生成的文件是在mysql服务器主机上创建的。请确保您正在查看mysql服务器主机,因为您似乎在客户端主机上,而客户端主机很可能不是mysql服务器主机。

    看见 http://dev.mysql.com/doc/refman/5.0/en/select.html 在关于输出文件的章节中,可获取有关此文件的文档。

        2
  •  12
  •   Wu Yongzheng    13 年前

    我在Fedora 17中遇到了这个问题,它是由systemd引起的。我觉得和大家分享很好。

    mysql> select * into outfile '/tmp/z1' from t1;
    Query OK, 673 rows affected (0.01 sec)
    mysql> select * into outfile '/tmp/z2' from t1;
    Query OK, 673 rows affected (0.01 sec)
    mysql> select * into outfile '/tmp/z1' from t1;
    ERROR 1086 (HY000): File '/tmp/z1' already exists
    mysql> Bye
    
    # cat /tmp/z1
    cat: /tmp/z1: No such file or directory
    # ls -d systemd-*
    /tmp/systemd-private-AQEueG
    /tmp/systemd-private-AuCNDY
    /tmp/systemd-private-TOMNxZ
    /tmp/systemd-private-UacrpE
    /tmp/systemd-private-yal7lQ
    /tmp/systemd-private-ZlRJeN
    # ls /tmp/systemd-private-TOMNxZ
    z1  z2
    

    罪魁祸首在/usr/lib/systemd/system/mysqld.service中。

    # Place temp files in a secure directory, not /tmp
    PrivateTmp=true
    

    this blog ,我找到了线索。

        3
  •  0
  •   edwardsharp    15 年前

    听起来您可能遇到了文件权限问题。确保运行mysqld的user:group具有写入/tmp/test.csv的adaqte权限

    有各种各样的服务器守护进程/文件权限风格可以解决这个问题。可能是基于UNIX的,您可以:chgrp mysqldGROUP/tmp