본문으로 바로가기

longtext, longblob 자료 출력 및 다운로드

category DB, ORM/🧊 MySQL 2020. 10. 31. 06:33
create database moviedb;
use moviedb;

create table movietbl(
	movie_id int,
    movie_title varchar(30),
    movie_director varchar(20),
    movie_star varchar(20),
    movie_script longtext,
    movie_film longblob
) default charset=utf8mb4;

insert movietbl values(1, '쉰들러 리스트', '스필버그', '리암 니슨', load_file('D:\Code\movies\Schindler.txt'), load_file('D:\Code\movies\Schindler.mp4'));

select * from movietbl;

 

어디감???

 

 

 

mysql 기본 설정을 확인해보면 출력 허용된 용량이 4MB 정도고, 신뢰할 수 있는 경로에 위 file 경로도 등록되어 있지 않으므로 등록해야 한다.
신뢰할 수 있는 경로는 기본적으로 설치된 경로의 Uploads 폴더가 지정되어 있다.

필자의 경우 (C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\)

Linux에서는 /etc/my.cnf를 보면 된다.

show variables like 'max_allowed_packet'; -- 출력 허용된 용량(default 4MB)
show variables like 'secure_file_priv'; -- 신뢰할 수 있는 파일 경로 

// C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\

 

우선 신뢰할 수 있는 경로를 추가하기 위해

C:\ProgramData\MySQL\MySQL Server 8.0 경로에 존재하는 my.ini를 수정해보도록하자.

vim으로 수정해도 되고 그냥 메모장으로 열어서 수정해도 된다.

 

아래와 같이 수정해주자

# Secure File Priv.
# 이 속성은 여러개 있어도 되지만 맨 마지막 것만 적용된다.
# 따라서 그냥... 기본값으로 쓰는 것도 나쁘지 않다만 연습삼아 바꿔보자
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"
secure-file-priv="D:\Code\movies"

# default 4M에서 1024M로 수정~
# The maximum size of one packet or any generated or intermediate string, or any parameter sent by the
# mysql_stmt_send_long_data() C API function.
max_allowed_packet=1024M

 

 

이런 작업을 거치면 longtext는 보인다. 그러나 longblob은 보이지 않는다.

해당 blob을 확인하기 위해서는 다운로드 받아야 한다.

 

text 는 outfile로 다운로드받고, blob은 dumpfile로 다운로드 받는다.

select movie_script from movietbl where movie_id=1
  into outfile 'D:\Code\movies\script.txt'
  lines terminated by '\\n'; -- 이 녀석은 줄바꿈 문자도 그대로 저장하기 위한 옵션

select movie_film from movietbl where movie_id=1 into dumpfile 'D:\Code\movies\moive.mp4';

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체