파트 5-3. 영화사이트대용량 데이터 구축 실습
위와 같은 데이터베이스를 만들어보자.
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, -- 파일 통채로 들어가므로 longtext
movie_film LONGBLOB -- 영화 동영상
) DEFAULT CHARSET=utf8mb4; -- 한글깨짐 방지
-- load_file 해당 위치 파일을 로딩해서 업로드해주는 기능
INSERT INTO movietbl VALUES ( 1, '쉰들러 리스트', '스필버그', '리암 니슨',
LOAD_FILE('C:/SQL/Movies/Schindler.txt'), LOAD_FILE('C:/SQL/Movies/Schindler.mp4') );
SELECT * FROM movietbl;
여기까지 실행하면 예상대로라면 정상적으로 조회되어야 하지만 다음과 같이 movie_script와 movie_film에 NULL값이 출력된다.
이런 현상에 대한 이유는 2가지가 있다.
- 최대 패킷 크기(최대 파일 크기)가 설정된 시스템 변수인 MAX_ALLOWED_PACKET값을 조회해보면 약 4MB로 설정되어 있다. 이 값을 수정해야한다.
- 업로드할 폴더가 보안상으로 허용해줘야 한다.
SHOW variables LIKE 'max_allowed_packet'; -- 4mb로 확인된다.
SHOW variables LIKE 'secure_file_priv'; -- 보안폴더 위치 확인
윈도우 오른쪽 클릭 -> window poershell 관리자 실행한 후 위와 같이 cmd -> cd %programdata% -> cd mysql -> cd “mysql server 8.0” -> notepad my.ini -> 열리는 메모장에서 ctrl+f 를 이용하여 max_allowed_packet 값을 1024로 수정 -> secure-file-priv에 새로운 보안 허용 위치 만들어준다.
이후에는 컴퓨터를 재시작 해주거나 net stop mysql -> net start mysql 로 mysql를 재시작해준다.
여기서 나는 따라하다가 mysql이 재시작되지 않고 오류가 발생했다. start mysql net helpmsg 3534 오류였는데 구글링의 도움으로는 결국 해결하지 못했고 뭐가 문제인지 하나하나 확인하다보니 movie폴더를 다른 곳에 옮기니 정상적으로 작동 되었다.
USE moviedb;
TRUNCATE movietbl; -- 기존 행 모두 제거
-- 다시 데이터 삽입
INSERT INTO movietbl VALUES ( 1, '쉰들러 리스트', '스필버그', '리암 니슨',
LOAD_FILE('C:/Movies/Schindler.txt'), LOAD_FILE('C:/Movies/Schindler.mp4') );
INSERT INTO movietbl VALUES ( 2, '쇼생크 탈출', '프랭크 다라본트', '팀 로빈스',
LOAD_FILE('C:/Movies/Shawshank.txt'), LOAD_FILE('C:/Movies/Shawshank.mp4') );
INSERT INTO movietbl VALUES ( 3, '라스트 모히칸', '마이클 만', '다니엘 데이 루이스',
LOAD_FILE('C:/Movies/Mohican.txt'), LOAD_FILE('C:/Movies/Mohican.mp4') );
SELECT * FROM movietbl; -- 확인
-- 다운로드
-- text는 outfile, 영상은 dumpfile
SELECT movie_script FROM movietbl WHERE movie_id=1
INTO OUTFILE 'C:/Movies/Schindler_out.txt' -- outfile하면 뒤에 작성한대로 다운받아진다.
LINES TERMINATED BY '\\n'; -- 줄바꿈문자도 저장하기 위한 코드
SELECT movie_film FROM movietbl WHERE movie_id=3 --
INTO DUMPFILE 'C:/Movies/Mohican_out.mp4'; -- 영상은 dumpfile 을 이용