2012-05-15 1 views

답변

1

, 당신은 LOCAL 키워드를 사용할 수 있습니다

LOCAL 키워드 지정된 경우, 연결의 클라이언트 측에 대한 해석됩니다

  • LOCAL이 지정되면 파일은 클라이언트 호스트의 클라이언트 프로그램에서 읽고 서버로 전송됩니다. 정확한 위치를 지정하기 위해 파일을 전체 경로 이름으로 지정할 수 있습니다. 상대 경로 이름으로 주어지면 이름은 클라이언트 프로그램이 시작된 디렉토리를 기준으로 해석됩니다.

    LOCALLOAD DATA과 함께 사용하면 파일의 복사본이 서버의 임시 디렉토리에 생성됩니다. 이것은 tmpdir 또는 slave_load_tmpdir의 값으로 결정되는 디렉토리가 아니라 운영 체제의 임시 디렉토리이며, MySQL 서버에서는 구성 할 수 없습니다. 일반적으로 시스템 임시 디렉토리는 Linux 시스템에서는 /tmp이고 Windows에서는 C:\WINDOWS\TEMP입니다.이 디렉토리에서 사본을 저장할 공간이 부족하면 LOAD DATA LOCAL 문이 실패 할 수 있습니다.

  • 이 지정되지 않은 경우 파일은 서버 호스트에 있어야하며 서버에서 직접 읽어야합니다. 서버는 다음 규칙을 사용하여 파일을 찾습니다.

    • 파일 이름이 절대 경로 이름 인 경우 서버는 지정된대로 파일 이름을 사용합니다.

    • 파일 이름이 하나 이상의 선행 구성 요소가있는 상대 경로 이름 인 경우 서버는 서버의 데이터 디렉토리를 기준으로 파일을 검색합니다.

    • 주요 구성 요소가없는 파일 이름이 지정되면 서버는 기본 데이터베이스의 데이터베이스 디렉토리에서 파일을 찾습니다.

      myfile.txt라는 이름으로 파일의 데이터베이스 디렉토리에서 읽어 반면 비 LOCAL 경우,이 규칙은, ./myfile.txt로라는 이름의 파일이 서버의 데이터 디렉토리에서 읽도록 의미하는 것으로

주 디폴트의 ​​데이타베이스

LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table; 

Windows 경로 : 예를 들어, db1 경우 기본 데이터베이스는 다음 LOAD DATA 문은 문이 명시 적으로 db2 데이터베이스의 테이블에 파일을로드에도 불구하고, db1에 대한 데이터베이스 디렉토리에서 파일 data.txt을 읽고 이름은 백 슬래시 대신 슬래시를 사용하여 지정됩니다. 백 슬래시를 사용하는 경우 이중으로 사용해야합니다.

보안상의 이유로 서버에있는 텍스트 파일을 읽을 때 파일은 데이터베이스 디렉터리에 있거나 모두 읽을 수 있어야합니다. 또한 서버 파일에 LOAD DATA INFILE을 사용하려면 FILE 권한이 있어야합니다. Section 6.2.1, “Privileges Provided by MySQL”을 참조하십시오.LOCAL로드 조작의 경우, secure_file_priv 시스템 변수가 비어 있지 않은 디렉토리 이름으로 설정된 경우,로드 될 파일은 해당 디렉토리에 있어야합니다.

LOCAL을 사용하면 파일 내용이 클라이언트에서 서버로 연결을 통해 보내야하기 때문에 서버가 파일에 직접 액세스하는 것보다 약간 느립니다. 반면 로컬 파일을로드하는 데는 FILE 특권이 필요하지 않습니다.

LOCAL으로 기본 중복 키 처리 동작은 IGNORE이 지정된 경우와 동일합니다. 이는 서버가 작업 도중에 파일 전송을 중지 할 방법이 없기 때문입니다. IGNORE에 대해서는이 섹션 뒷부분에서 자세히 설명합니다.

LOCAL은 서버와 클라이언트가 모두 허용하도록 구성된 경우에만 작동합니다. 예를 들어 mysqld--local-infile=0으로 시작된 경우 LOCAL이 작동하지 않습니다. Section 6.1.6, “Security Issues with LOAD DATA LOCAL을 참조하십시오.

+0

나는 그가 LOAD_FILE 기능을 원한다고 생각했다. – Devart

+0

@Devart : 오. 나는 그것을 고려하지 않았다. OP의 해명을 기다리고 있습니다. – eggyal