MySQL 클라이언트(mysql)는 일반적으로 대화형(interactive) 방식으로 사용되지만, 텍스트 파일에 저장된 SQL 문을 한 번에 실행할 수도 있습니다. 이 글에서는 MySQL 클라이언트에서 텍스트 파일의 SQL 문을 실행하는 다양한 방법을 살펴보겠습니다.
대화형 방식으로 mysql 실행
가장 기본적인 방법은 데이터베이스 이름을 지정하여 mysql 클라이언트를 대화형으로 실행하는 것입니다.
shell> mysql db_name
SQL 문을 텍스트 파일에 작성하여 실행
실행하려는 SQL 문을 미리 텍스트 파일(text_file)에 작성해 두고, mysql에게 해당 파일에서 입력을 읽어오도록 지시할 수도 있습니다. 이 방식은 반복적으로 실행해야 하는 스크립트나 대량의 쿼리를 처리할 때 특히 유용합니다.
파일 리디렉션(<)을 사용하면 텍스트 파일에 담긴 SQL 문들이 순서대로 실행됩니다.
shell> mysql db_name < text_file
데이터베이스 이름 생략하기
텍스트 파일의 첫 번째 문장으로 USE db_name; 문을 넣으면, 명령줄에서 데이터베이스 이름을 따로 지정할 필요가 없습니다.
shell> mysql < text_file
mysql 실행 중에 스크립트 파일 실행하기
mysql이 이미 실행 중인 상태라면 source 명령 또는 \. 명령을 사용해 SQL 스크립트 파일을 바로 실행할 수 있습니다.
mysql> source file_name mysql> \. file_name
진행 상황 정보 출력하기
스크립트 실행 중 진행 상황이나 참고 정보를 화면에 표시하고 싶다면, 아래와 같은 SELECT 문을 스크립트에 삽입하면 됩니다.
SELECT '<info_to_display>' AS ' ';
출력 결과
<info_to_display>
--verbose 옵션 활용
mysql을 --verbose 옵션과 함께 실행하면, 각 SQL 문이 실행되기 전에 해당 문장이 먼저 화면에 출력된 후 결과가 표시됩니다. 이를 통해 어떤 쿼리가 어떤 결과를 만들어내는지 쉽게 추적할 수 있어 디버깅에 유용합니다.
BOM(바이트 순서 표식) 처리 관련 참고 사항
- mysql은 입력 파일 시작 부분에 있는 유니코드 BOM(Byte Order Mark) 문자를 무시합니다.
- 이 기능이 도입되기 전에는 BOM 문자가 그대로 서버로 전송되어 구문 오류(syntax error)가 발생하는 문제가 있었습니다.
- BOM이 존재한다고 해서 mysql의 기본 문자셋(character set)이 자동으로 변경되지는 않습니다.
- 문자셋을 지정하고 싶다면
--default-character-set=utf8과 같은 옵션을 사용하여 mysql을 실행하면 됩니다.