MySQL 출력 /TMP로 선택합니다
-
10-07-2019 - |
문제
출력을 생성하기 위해 다음 코드를 얻을 수 없습니다. 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 프로세스는 실제로 소수의 장소에서만 읽거나 쓸 수 있어야합니다.