본문 바로가기
MySQL

MySQL 대용량 데이터 업로드 / 다운로드

by suhsein 2024. 11. 5.
728x90

MySQL 대용량 데이터 업로드

INSERT INTO movietbl
 VALUES(1, '쉰들러 리스트', '스필버그', '리암 니슨',
    LOAD_FILE('C:/SQL/movies/Schindler.txt'),
    LOAD_FILE('C:/SQL/movies/Schindler.mp4'));
  • LOAD_FILE(PATH) : 해당 경로의 파일을 업로드

문제 상황

LONGTEXT, LONGBLOB의 대용량 데이터 INSERT 시 NULL 값 발생

원인

  1. ** LONGTEXT, LONGBLOG의 MAX 값 조정 필요**
    => max_allowed_packet
    SHOW VARIABLES LIKE 'max_allowed_packet' 로 원래 값 확인 가능

  2. ** LOAD_FILE(PATH) 사용시 해당 경로를 보안 폴더로 지정 필요**
    => secure-file-priv
    SHOW VARIABLES LIKE 'secure-file-priv' 로 원래 값 확인 가능

해결 방안

  1. cmd를 관리자 모드로 실행
  2. C:\ProgramData\MySQL\MySQL Server 8.0로 이동
  3. notepad my.ini로 파일을 열어서 두 설정 값을 수정

1. max_allowed_packet 조정

max_allowed_packet의 값을 파일이 들어갈만큼 큰 값으로 수정

2. secure-file-priv에 경로 추가

업로드하려는 파일이 있는 경로를 추가
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads" 아랫줄에
secure-file-priv="경로" 를 추가.

이후 my.ini를 저장하고 닫기

MySQL 재시작

cmd에서 NET STOP MySQL을 입력해 MySQL을 종료
종료가 완료되면 NET START MySQL을 입력해 MySQL을 재시작

이제 my.ini에 설정한 내용이 MySQL에 적용된다.

MySQL 대용량 데이터 다운로드

  • txt : OUTFILE
  • mp4 : DUMPFILE

txt 파일

SELECT ~ INTO OUTFILE 'PATH' 명령어 사용

SELECT movie_script from movietbl where movie_id = 1
 INTO OUTFILE 'C:/SQL/movies/Schindler_out.text'
 LINES TERMINATED BY '\\n'; -- 필수

mp4 파일

SELECT ~ INTO DUMPFILE 'PATH' 명령어 사용

SELECT movie_film from movietbl where movie_id = 3
 INTO DUMPFILE 'C:/SQL/movies/Mohican_out.mp4';
728x90