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 테이블에 적재할 수 있습니다.