MySQL 쿼리 결과를 파일로 저장하기 (INTO OUTFILE)
MySQL에서 쿼리 실행 결과를 텍스트(.txt) 파일이나 엑셀에서 열 수 있는 CSV 파일로 저장하려면 INTO OUTFILE 구문을 사용하면 됩니다. 이 구문은 SELECT 쿼리의 결과를 화면이 아닌 서버의 파일로 직접 출력해 주므로, 대량의 데이터를 백업하거나 다른 프로그램으로 넘겨야 할 때 매우 유용합니다.
아래에서 실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table SaveintoTextFile
-> (
-> id int,
-> name varchar(100)
-> );
Query OK, 0 rows affected (0.55 sec)
2단계: 데이터 삽입
생성한 테이블에 샘플 레코드를 입력합니다.
mysql> insert into SaveintoTextFile values(1,'John');
Query OK, 1 row affected (0.44 sec)
mysql> insert into SaveintoTextFile values(101,'Carol');
Query OK, 1 row affected (0.17 sec)
mysql> insert into SaveintoTextFile values(3,'David');
Query OK, 1 row affected (0.14 sec)
3단계: 저장된 데이터 확인
테이블에 정상적으로 데이터가 들어갔는지 조회해 봅니다.
mysql> select * from SaveintoTextFile;
실행 결과는 다음과 같습니다.
+------+-------+
| id | name |
+------+-------+
| 1 | John |
| 101 | Carol |
| 3 | David |
+------+-------+
3 rows in set (0.00 sec)
4단계: INTO OUTFILE로 파일 저장
쿼리 결과를 텍스트 파일로 내보낼 때 사용하는 기본 문법은 다음과 같습니다.
SELECT col_name1, col_name2, ......N
FROM yourTableName
INTO OUTFILE "저장할 파일의 전체 경로";
여기서 주의할 점은, MySQL 8.0부터는 보안 정책상 secure_file_priv 시스템 변수에 지정된 디렉터리에만 파일을 저장할 수 있다는 것입니다. 허용된 경로를 모른다면 아래 명령으로 먼저 확인하세요.
mysql> SHOW VARIABLES LIKE 'secure_file_priv';
일반적인 Windows 환경에서는 C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/ 폴더가 기본 허용 경로입니다. 이제 위 문법을 실제 쿼리에 적용해 보겠습니다. 여기서는 출력 파일 이름을 "QueryOutput.txt"로 지정했습니다.
mysql> SELECT id, name FROM SaveintoTextFile
-> INTO OUTFILE "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/QueryOutput.txt";
Query OK, 3 rows affected (0.02 sec)
5단계: 파일 생성 확인
파일이 정상적으로 생성되었는지 확인하려면 MySQL 설치 폴더 아래의 Uploads 폴더를 열어봅니다.

이제 텍스트 파일을 열면 아래 스크린샷처럼 쿼리 결과가 그대로 저장되어 있는 것을 확인할 수 있습니다.

엑셀(Excel)에서 열고 싶다면?
결과를 엑셀에서 바로 열어야 한다면 파일 확장자를 .csv로 지정하고, 각 필드를 구분할 옵션을 추가하면 됩니다.
mysql> SELECT id, name FROM SaveintoTextFile
-> INTO OUTFILE "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/QueryOutput.csv"
-> FIELDS TERMINATED BY ','
-> LINES TERMINATED BY '\n';
이렇게 생성된 CSV 파일은 엑셀에서 더블클릭만으로 바로 열 수 있으며, 각 컬럼이 셀 단위로 깔끔하게 분리됩니다.
마무리 및 참고 사항
- 파일 경로: 반드시 secure_file_priv에 허용된 디렉터리를 사용해야 하며, 이미 같은 이름의 파일이 존재하면 오류가 발생하므로 사전에 삭제해 두어야 합니다.
- 권한 문제: MySQL 서버 프로세스가 해당 폴더에 쓰기 권한을 가지고 있어야 합니다.
- 대안: 클라이언트 쪽에 파일을 저장하고 싶다면
mysql -e "쿼리" > 파일명.txt처럼 명령줄 리디렉션을 사용하는 방법도 있습니다.