문제

출력을 생성하기 위해 다음 코드를 얻을 수 없습니다. MySQL 사용자는 "모든"보조금 수준을 가지고 있으며, /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 행에 영향을받은"보다 결과를 확인할 수 있습니까?

도움이 되었습니까?

해결책

Outfile 절에 의해 생성되는 파일은 MySQL Server 호스트에서 작성됩니다. MySQL 서버 호스트 호스트가 아닌 클라이언트 호스트에있는 것처럼 보이므로 MySQL 서버 호스트를보고 있는지 확인하십시오.

보다 http://dev.mysql.com/doc/refman/5.0/en/select.html 이에 관한 문서에 대한 Outfile에 관한 섹션에서.

다른 팁

나는 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

감사합니다 이 블로그, 나는 단서를 찾았다.

파일 권한 문제가 발생할 수있는 것 같습니다. 사용자 : mysqld가 실행중인 그룹이 adaqute가 /tmp/test.csv에 쓸 수있는 권한이 있습니다.

문제를 해결할 수있는 다양한 서버 데몬/파일 권한 풍미가 있습니다. 아마도 유닉스 기반, 당신은 할 수 있습니다 : chgrp mysqldgroup /tmp

그러나 서버가 특정 방식으로 구성되어 있으므로 적응합니다. MySQLD 프로세스는 실제로 소수의 장소에서만 읽거나 쓸 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top