복붙노트

[SQL] MySQL의 - SELECT * INTO OUTFILE LOCAL?

SQL

MySQL의 - SELECT * INTO OUTFILE LOCAL?

MySQL은 굉장합니다! 나는 현재 주요 서버 마이그레이션에 참여하고 있고 이전에 사용 된 우리의 작은 데이터베이스는 클라이언트와 동일한 서버에서 호스팅 할 수 있습니다. 그래서 우리는이 작업을 수행하는 데 사용 : SELECT * INTO OUTFILE .... LOAD DATA INFILE ....

이제, 우리는 다른 서버로 데이터베이스를 이동하고 SELECT * INTO OUTFILE .... 더 이상 작품을 이해하기 - 보안상의 이유로 나는 믿는다. 그러나, 흥미롭게 DATA INFILE을 LOAD .... DATA LOCAL INFILE ....와 빵을로드 할 수 변경 될 수 있습니다, 그것은 작동합니다.

나는 불평하고 있지 않다도 내가 MySQL을 향한 혐오를 표현하고있다. 추가 코드 및 시스템 호출의 추가 2 개 라인에 대한 대안은 .SQL 스크립트를 형성한다. LOAD DATA LOCAL INFILE 작동 왜 SELECT INTO OUTFILE LOCAL 같은 건 없다 왜 내가 알고 싶었던 모든은?

나는 위의 제 질문에 직접 답을 찾을 수 없습니다, 내 숙제를했다. 나도 MySQL의 @ 기능 요청을 찾을 수 없습니다. 누군가가 그를 취소 할 수있는 경우, 그것은 굉장했다!

MariaDB는이 문제를 처리 할 수 ​​있습니까?

해결법

  1. ==============================

    1.수동에서 : SELECT ... INTO OUTFILE 문을 당신은 매우 신속하게 서버 시스템의 텍스트 파일에 테이블을 덤프 수 있도록 주로위한 것입니다. 서버 호스트 이외의 클라이언트 호스트에서 결과 파일을 만들려면 SELECT ... INTO OUTFILE을 사용할 수 없습니다. 이 경우, 대신 같은 명령을 사용한다 MySQL의 -e "SELECT ..."> 클라이언트 호스트에서 파일을 생성 할 수 FILE_NAME. "

    수동에서 : SELECT ... INTO OUTFILE 문을 당신은 매우 신속하게 서버 시스템의 텍스트 파일에 테이블을 덤프 수 있도록 주로위한 것입니다. 서버 호스트 이외의 클라이언트 호스트에서 결과 파일을 만들려면 SELECT ... INTO OUTFILE을 사용할 수 없습니다. 이 경우, 대신 같은 명령을 사용한다 MySQL의 -e "SELECT ..."> 클라이언트 호스트에서 파일을 생성 할 수 FILE_NAME. "

    http://dev.mysql.com/doc/refman/5.0/en/select.html

    예 :

    mysql -h my.db.com -u usrname--password=pass db_name -e 'SELECT foo FROM bar' > /tmp/myfile.txt
    
  2. ==============================

    2.당신은 당신이 (--silent) 옵션이 전달 된 -s와 MySQL의 콘솔 원하는 것을 얻을 수 있습니다.

    당신은 당신이 (--silent) 옵션이 전달 된 -s와 MySQL의 콘솔 원하는 것을 얻을 수 있습니다.

    그것은 아마 특수 문자 이스케이프되지 않도록 또한 -r (--raw) 옵션을 전달하는 좋은 아이디어입니다. 당신이 원하는 것 같은 당신은 파이프 쿼리에이를 사용할 수 있습니다.

    MySQL의 -u 사용자 이름 -h 호스트 이름 -p -s -r -e "를 선택 CONCAT ( '이', '', '작품')"

    편집 : 또한, 당신은 단지 (MySQL의 -ss -r 등) 다른 -s를 추가하여 출력에서 ​​열 이름을 제거하려면

  3. ==============================

    3.LOAD DATA INFILE에 당신이주는 경로는 서버가 실행중인 시스템이 아니라 당신이에서 연결 시스템에서 파일 시스템을위한 것입니다. 그렇지 않으면 허용하지 않는다, LOAD DATA LOCAL INFILE은 클라이언트의 기계이지만, 서버가 올바른 설정으로 시작되었습니다해야합니다. 당신은 여기에 대한 모든을 읽을 수 있습니다 : http://dev.mysql.com/doc/refman/5.0/en/load-data-local.html

    LOAD DATA INFILE에 당신이주는 경로는 서버가 실행중인 시스템이 아니라 당신이에서 연결 시스템에서 파일 시스템을위한 것입니다. 그렇지 않으면 허용하지 않는다, LOAD DATA LOCAL INFILE은 클라이언트의 기계이지만, 서버가 올바른 설정으로 시작되었습니다해야합니다. 당신은 여기에 대한 모든을 읽을 수 있습니다 : http://dev.mysql.com/doc/refman/5.0/en/load-data-local.html

    그것은 아마도 연결을 통해 할 까다로운 것 외에, 로컬 버전이 있지 않은지 이유를 SELECT INTO OUTFILE에 관해서는 내가 아니에요. 당신은 mysqldump는 도구를 통해 동일한 기능을 얻을 수 있지만 서버에 SQL을 전송을 통해 할 수 있습니다.

  4. ==============================

    4.Waverly360에서 알 수 있듯이 -e 옵션을 사용하여 MySQL의 CLI를 사용하여 좋은 하나이지만, 그 메모리가 갈 수도 큰 결과를 살해. (havent 한은 뒤에 이유를 찾을 수 있습니다). 그런 경우, 당신은 모든 기록이 필요하면, 내 솔루션입니다 : mysqldump는 + mysqldump2csv :

    Waverly360에서 알 수 있듯이 -e 옵션을 사용하여 MySQL의 CLI를 사용하여 좋은 하나이지만, 그 메모리가 갈 수도 큰 결과를 살해. (havent 한은 뒤에 이유를 찾을 수 있습니다). 그런 경우, 당신은 모든 기록이 필요하면, 내 솔루션입니다 : mysqldump는 + mysqldump2csv :

    wget https://raw.githubusercontent.com/jamesmishra/mysqldump-to-csv/master/mysqldump_to_csv.py
    mysqldump -u username -p --host=hostname database table | python mysqldump_to_csv.py > table.csv
    
  5. ==============================

    5.제목 : Re : SELECT * INTO OUTFILE을

    제목 : Re : SELECT * INTO OUTFILE을

    MySQL은 서버의 OUTFILE 디렉토리에 파일을 쓸 수있는 권한이 있는지 확인하십시오.

  6. ==============================

    6.나 자신이 아니라 정기적으로 (희망에 내가 전에 ... 뭔가를 놓친)이 정확한 문제를 찾고 찾을 수 있기 때문에, 나는 마지막으로 좀 HTTPS처럼, CSV 파일로 MySQL의 쿼리를 시간이 걸릴 및 수출에 작은 요점을 쓰기로했다 : /을 /stackoverflow.com/a/28168869하지만 PHP와 더 많은 옵션의 부부와 함께 기반. 간단한의 CONCAT 그것은 '아무튼 이후로는 충분하지 않습니다 그래서, 내가 미세 조정에 CSV 매개 변수 (구분, NULL 값 처리) 할 수 있어야합니다 및 파일이 실제로 유효한 CSV를 할 필요가 있기 때문에, 내 사용 사례에 대한 중요 값이 줄 바꿈 또는 CSV 구분 기호를 포함하는 경우 t이 유효 CSV 파일을 생성합니다.

    나 자신이 아니라 정기적으로 (희망에 내가 전에 ... 뭔가를 놓친)이 정확한 문제를 찾고 찾을 수 있기 때문에, 나는 마지막으로 좀 HTTPS처럼, CSV 파일로 MySQL의 쿼리를 시간이 걸릴 및 수출에 작은 요점을 쓰기로했다 : /을 /stackoverflow.com/a/28168869하지만 PHP와 더 많은 옵션의 부부와 함께 기반. 간단한의 CONCAT 그것은 '아무튼 이후로는 충분하지 않습니다 그래서, 내가 미세 조정에 CSV 매개 변수 (구분, NULL 값 처리) 할 수 있어야합니다 및 파일이 실제로 유효한 CSV를 할 필요가 있기 때문에, 내 사용 사례에 대한 중요 값이 줄 바꿈 또는 CSV 구분 기호를 포함하는 경우 t이 유효 CSV 파일을 생성합니다.

    주의 : PHP가 서버에 설치 될 필요합니다! (PHP는 -v를 통해 확인 가능)

    "설치"mysql2csv를 통해

    wget https://gist.githubusercontent.com/paslandau/37bf787eab1b84fc7ae679d1823cf401/raw/29a48bb0a43f6750858e1ddec054d3552f3cbc45/mysql2csv -O mysql2csv -q && (sha256sum mysql2csv | cmp <(echo "b109535b29733bd596ecc8608e008732e617e97906f119c66dd7cf6ab2865a65  mysql2csv") || (echo "ERROR comparing hash, Found:" ;sha256sum mysql2csv) ) && chmod +x mysql2csv
    

    (다운로드 요점, 체크 체크의 내용과 그것을 실행하기)

    사용 예

    ./mysql2csv --file="/tmp/result.csv" --query='SELECT 1 as foo, 2 as bar;' --user="username" --password="password"
    

    내용 파일 /tmp/result.csv을 생성

    foo,bar
    1,2
    

    참조에 대한 도움말

    ./mysql2csv --help
    Helper command to export data for an arbitrary mysql query into a CSV file.
    Especially helpful if the use of "SELECT ... INTO OUTFILE" is not an option, e.g.
    because the mysql server is running on a remote host.
    
    Usage example:
    ./mysql2csv --file="/tmp/result.csv" --query='SELECT 1 as foo, 2 as bar;' --user="username" --password="password"
    
    cat /tmp/result.csv
    
    Options:
            -q,--query=name [required]
                    The query string to extract data from mysql.
            -h,--host=name
                    (Default: 127.0.0.1) The hostname of the mysql server.
            -D,--database=name
                    The default database.
            -P,--port=name
                    (Default: 3306) The port of the mysql server.
            -u,--user=name
                    The username to connect to the mysql server.
            -p,--password=name
                    The password to connect to the mysql server.
            -F,--file=name
                    (Default: php://stdout) The filename to export the query result to ('php://stdout' prints to console).
            -L,--delimiter=name
                    (Default: ,) The CSV delimiter.
            -C,--enclosure=name
                    (Default: ") The CSV enclosure (that is used to enclose values that contain special characters).
            -E,--escape=name
                    (Default: \) The CSV escape character.
            -N,--null=name
                    (Default: \N) The value that is used to replace NULL values in the CSV file.
            -H,--header=name
                    (Default: 1) If '0', the resulting CSV file does not contain headers.
            --help
                    Prints the help for this command.
    
  7. from https://stackoverflow.com/questions/2867607/mysql-select-into-outfile-local by cc-by-sa and MIT license