반응형
MySQL에서는 SELECT INTO OUTFILE을 사용해 쿼리 결과를 파일로 저장할 수 있고, 반대로 LOAD DATA INFILE을 사용하면 외부 파일의 데이터를 테이블로 불러올 수 있다.
이 두 기능을 조합하면, 복잡한 데이터 이관, 대용량 백업, 정기 보고서 자동화 등에 매우 효과적인 파이프라인을 구축할 수 있다.
✅ SELECT INTO OUTFILE로 결과를 저장하기
SELECT INTO OUTFILE은 SELECT 결과를 서버에 텍스트 파일로 저장한다. 기본 사용법은 다음과 같다.
SELECT user_id, user_name, email
FROM users
WHERE created_at >= CURDATE() - INTERVAL 7 DAY
INTO OUTFILE '/var/lib/mysql-files/new_users.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
이 쿼리는 최근 7일간 가입한 사용자의 정보를 CSV 형식으로 저장한다.
저장된 파일은 FIELDS 옵션으로 구분자, 인코딩, 줄바꿈 방식을 설정할 수 있다.
파일 경로와 권한 주의사항
- MySQL은 기본적으로 secure_file_priv 변수로 지정된 디렉토리에서만 파일 입출력을 허용한다.
- 해당 디렉토리는 아래 쿼리로 확인 가능하다.
SHOW VARIABLES LIKE 'secure_file_priv';
반응형
✅ LOAD DATA INFILE로 파일 불러오기
저장한 CSV 파일을 다시 MySQL로 불러올 때 사용하는 명령이 LOAD DATA INFILE이다.
기본 문법
LOAD DATA INFILE '/var/lib/mysql-files/new_users.csv'
INTO TABLE users_backup
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
- INTO TABLE: 데이터를 불러올 테이블 지정
- IGNORE 1 LINES: 헤더 라인을 무시할 경우 사용
- FIELDS, LINES 옵션은 SELECT INTO OUTFILE과 동일하게 맞춰야 한다
대상 테이블은 반드시 존재해야 하며, 컬럼 순서도 파일 순서와 일치해야 한다
CREATE TABLE users_backup (
user_id INT,
user_name VARCHAR(50),
email VARCHAR(100)
);
✅ 실전 예제: 특정 테이블 데이터를 백업하고 복원하기
1단계 – 파일로 내보내기
SELECT * FROM orders
INTO OUTFILE '/var/lib/mysql-files/orders_backup.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
2단계 – 새로운 테이블에 복사
CREATE TABLE orders_archive LIKE orders;
LOAD DATA INFILE '/var/lib/mysql-files/orders_backup.csv'
INTO TABLE orders_archive
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n';
이 예제는 orders 테이블의 데이터를 orders_archive 테이블로 파일을 통해 이관하는 과정이다.
간단한 INSERT INTO ... SELECT보다, 서버 간 파일 이동 또는 대용량 처리가 필요한 상황에 적합하다.
반응형
✅ 에러 방지 체크리스트
체크 항목 | 설명 |
파일 경로가 secure_file_priv 경로에 있는가? | SHOW VARIABLES로 확인 필요 |
LOAD 권한이 있는가? | FILE 권한이 있어야 함 |
FIELDS, LINES 옵션이 저장 시와 동일한가? | 일치하지 않으면 파싱 오류 발생 |
테이블 구조가 파일 컬럼 순서와 일치하는가? | 불일치 시 에러 또는 잘못된 값 삽입 |
✅ 보안과 권한 설정 팁
- 외부 사용자가 접근 가능한 경로에는 파일을 저장하지 않아야 한다
- MySQL 사용자에게는 FILE 권한이 있어야 INTO OUTFILE 및 LOAD DATA INFILE이 가능하다
- 로컬 환경에서 파일을 로드할 때는 LOCAL 옵션 사용
LOAD DATA LOCAL INFILE '/path/to/file.csv' INTO TABLE your_table;
단, 이 경우 --local-infile 옵션이 활성화되어 있어야 하며, 서버 측에서도 허용되어야 한다.
✅ INTO OUTFILE vs LOAD DATA INFILE 요약 비교
항목 | INTO OUTFILE | LOAD DATA INFILE |
역할 | 데이터 저장 | 데이터 불러오기 |
경로 | 서버 파일 경로 | 서버 or LOCAL 가능 |
주 사용 목적 | CSV 추출, 보고서, 백업 | 초기 데이터 적재, 마이그레이션 |
성능 | 빠름 | 매우 빠름 (대량 데이터 처리에 적합) |
두 기능을 함께 사용하면 MySQL만으로도 데이터 이관 및 추출 자동화 파이프라인을 구성할 수 있다.
✅ 공식 문서 링크
반응형
'DB' 카테고리의 다른 글
[MySQL] UPDATE + JOIN 활용법 완전 정리 – 다중 테이블을 수정하는 강력한 방법 (0) | 2025.06.30 |
---|---|
[MySQL] UPDATE + WHERE (안전하고 정확한 데이터 수정 가이드) (0) | 2025.06.30 |
[MySQL] UPDATE로 다중 컬럼 동시에 수정하는 방법 완벽 정리 (0) | 2025.06.30 |
[MySQL] UPDATE 기본 문법 완벽 정리 – 데이터 수정 (0) | 2025.06.30 |
[MySQL] SELECT INTO OUTFILE로 결과를 파일로 저장하는 방법 총정리 (0) | 2025.06.30 |
[MySQL] UNION과 UNION ALL 완전정복 – 다중 SELECT 결과 통합의 모든 것 (0) | 2025.06.30 |
[MySQL] ENUM 성능 최적화와 실무 활용 팁 총정리 (0) | 2025.06.30 |
[MySQL] SELECT와 ENUM 컬럼을 활용한 데이터 정합성 및 조회 최적화 전략 (1) | 2025.06.30 |