Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

명령줄에서 MySQL 테이블로 데이터를 가져올 때 자주 쓰이는 mysqlimport 핵심 옵션 총정리

mysqlimport는 명령줄 환경에서 MySQL 테이블로 텍스트 파일의 데이터를 빠르게 가져올 수 있는 유틸리티입니다. 내부적으로 LOAD DATA INFILE 문장을 실행하며, 가져오려는 파일의 이름(확장자 제외)이 곧 대상 테이블 이름으로 사용됩니다. 다양한 옵션을 조합하면 중복 처리, 오류 대응, 필드 구분 방식 등 가져오기 동작을 세밀하게 제어할 수 있습니다.

mysqlimport 주요 옵션 한눈에 보기

아래 표는 mysqlimport 실행 시 자주 사용되는 옵션과 각 옵션이 데이터 가져오기에 미치는 영향을 정리한 것입니다.

옵션동작
-r 또는 --replace가져온 행이 기존 행과 동일한 고유 키(unique key) 값을 가질 경우, 기존 행을 덮어씁니다.
-i 또는 --ignore기존 행과 동일한 고유 키 값을 가진 행은 무시하고 건너뜁니다.
-f 또는 --force오류가 발생하더라도 mysqlimport가 데이터 삽입을 계속 진행하도록 강제합니다.
-l 또는 --lock-tables가져오기 전에 각 테이블을 잠급니다. 트래픽이 많은 바쁜 서버에서 유용한 옵션입니다.
-d 또는 --delete데이터를 삽입하기 전에 해당 테이블의 내용을 모두 비웁니다.
--fields-terminated-by='char'같은 행 안에서 값들 사이에 사용되는 구분자를 지정합니다. 기본값은 \t(탭)입니다.
--fields-enclosed-by='char'각 필드를 감싸는 인용 부호(구분자)를 지정합니다. 기본값은 없음입니다.
--fields-optionally-enclosed-by='char'--fields-enclosed-by와 동일하지만, 구분자가 문자열 타입 컬럼만 감싸는 데 사용됩니다. 기본값은 없음입니다.
--fields-escaped-by='char'특수 문자 앞에 위치하는 이스케이프 문자를 지정합니다. 기본값은 \(백슬래시)이며, 지정할 경우 '\\'처럼 표기해야 합니다.
--lines-terminated-by='char'각 데이터 행을 끝내는 줄바꿈 구분자를 지정합니다. 기본값은 \n(개행 문자)입니다.
-u 또는 --user접속에 사용할 사용자 이름을 지정합니다. 기본값은 Unix 로그인 계정명입니다.
-p 또는 --password비밀번호를 지정합니다.
-h 또는 --host지정한 호스트의 MySQL 서버로 데이터를 가져옵니다. 기본값은 localhost입니다.
-s 또는 --silent조용한(silent) 모드로 실행하며, 오류가 발생했을 때만 출력됩니다.
-v 또는 --verbose상세(verbose) 모드로 실행하여 더 많은 진행 정보를 출력합니다.
-L 또는 --local클라이언트 쪽에 있는 로컬 파일을 가져오기 대상으로 지정합니다.
-V 또는 --version프로그램 버전 정보를 출력한 뒤 종료합니다.
-? 또는 --help도움말 메시지를 출력한 뒤 종료합니다.

실전 활용 예시

예를 들어 CSV 파일을 가져오면서 기존 데이터를 모두 지우고 새로 입력하려면 다음과 같이 옵션을 조합할 수 있습니다.

mysqlimport -u root -p --delete --fields-terminated-by=',' --lines-terminated-by='\n' mydb /path/to/employees.txt

위 명령은 mydb 데이터베이스의 employees 테이블에 파일 데이터를 넣으며, 쉼표를 필드 구분자로 사용하고 가져오기 전에 테이블을 비웁니다.

옵션 사용 시 주의사항

  • --replace와 --ignore는 동시에 사용할 수 없습니다. 중복 키 처리 방식이 서로 반대이기 때문에 하나만 선택해야 합니다.
  • -d(--delete) 옵션은 테이블을 완전히 비우므로, 운영 중인 데이터에 사용할 경우 반드시 백업 후 실행해야 합니다.
  • -f(--force)는 오류를 무시하고 진행하므로, 일부 데이터 누락이 발생할 수 있다는 점을 감안해야 합니다.
  • CSV처럼 각 필드가 큰따옴표로 묶인 파일이라면 --fields-enclosed-by='"' 옵션을 함께 지정하는 것이 좋습니다.

이처럼 mysqlimport의 옵션만 잘 활용해도 대량의 데이터를 안정적이고 빠르게 MySQL 테이블에 적재할 수 있습니다.