본문 바로가기

Database/mariaDB administrator

MySQL 8.0 테이블스페이스 관리 방법 변경 내용 feat.테이블 스페이스 삭제 한다면?!

MySQL 8.0 테이블스페이스 관리 방법 변경 내용 feat.테이블 스페이스 삭제한다면?!

안녕하세요.

 

MySQL 8.0에서의 테이블스페이스 관리 방법에 대해 변경된 내용과 사용 예제를 정리하겠습니다. 바로 시작합니다.

 

innodb_file_per_table_tablespace

MySQL 8.0을 새로 설치하였을 때 설정되는 default tablespace 옵션입니다. 다른 설정이 없으면 기본 적용입니다. 각 테이블마다 테이블 스페이스를 하나씩 만들어 관리됩니다. 압축 같은 다양한 테이블스페이스 옵션 등을 이용해서 각 테이블 별로 유연한 관리가 가능합니다.

 

general tablespace

우리가 아는 일반적인 테이블 스페이스 관리 방법입니다. ibd 파일을 하나 만들어 놓고, (default는 systeminnodb system tablespace) 한 ibd 파일에 여러 테이블의 데이터를 저장하는 방법 입니다. auto extened를 지원하지만 제한적입니다.마지막에 생성된 파일 하나에만 auto extened 옵션을 사용할 수 있습니다.

general tablespace 방식은 파일 시스템 오버해드가 덜하며, 메타데이터 크기를 줄일 수 있는 장점이 있습니다.

 

undo tablespace

이전에는 초기 설치 시엔 생성되지 않기에 원할 때 생성하여 사용할 수 있었지만, MySQL 8.0부터는 설치 후 다른 설정 없이 2개가 기본으로 생성됩니다.

 

<innodb_file_per_table_tablespace 사용 예제>

-- 테이블을 두 개 만듭니다. moonbk, moonbk_1

-- /var//var/lib/mysql 에 가면 테이블이 있는 스키마와 이름이 같은 president 폴더가 보입니다. 폴더를 확인해봅니다. 위에서 만든 테이블 이름과 같은 ibd 파일이 두 개 보입니다.

-- 다시 DB에서 moonbk_1 테이블을 drop 해봅니다.

-- 테이블 스페이스 파일이 있던 president 폴더를 다시 확인해보니 moonbk_1 파일이 삭제된 걸 확인할 수 있습니다.

-- 다시 처음과 같이 moonbk_1 테이블을 만들고, 테이블 스페이스 파일이 생성된 것을 확인 후, 이번에는 테이블을 drop 하지 않고 파일을 먼저 지워 봅니다.

-- 테이블 스페이스 파일을 삭제했는데도 moonbk_1 테이블이 조회됩니다. 데이터도 insert 되고요.

-- 하지만 그건 트릭이었습니다. 메모리의 트릭... 테이블 스페이스를 삭제하였으나 해당 정보가 메모리에 있었기에 조회도 되고, insert 도 되었습니다. 해당 세션을 종료 후 다시 접속하거나, 아래 그림처럼 mysql을 재시작하면 해당 테이블은 더 이상 조회되지 않습니다.

-- 아래 그림처럼 말이죠.

이번에는 mysql 8.0의 테이블 스페이스 관리에 대해서 알아보았습니다.

 

어떤가요? 간단하죠? ^^

 

감사합니다.

 

 

by.sTricky