14.5.3 File-Per-Table 모드 활성화 및 비활성화
file-per-table 모드를 MySQL 서버의 기본려면, --innodb_file_per_table
명령 행 옵션으로 서버를 시작하거나 my.cnf
의 [mysqld]
섹션에 다음 줄을 추가합니다.
[mysqld] innodb_file_per_table
서버가 작동하는 동안 명령을 발행 할 수 있습니다.
SET GLOBAL innodb_file_per_table=1;
file-per-table 모드가 활성화되면 InnoDB
는 적절한 데이터베이스 디렉터리 내의 고유의
파일에 새로 작성된 각 테이블을 저장합니다. tbl_name
.ibdMyISAM
스토리지 엔진과는 달리, 인덱스 및 데이터에 각각
와 tbl_name
.MYD
파일이 있으면, tbl_name
.MYIInnoDB
는 데이터 및 인덱스를 함께 하나의 .ibd
파일에 저장합니다. 그래도
파일은 기존대로 만들어집니다. tbl_name
.frm
사용할 부팅 옵션에서 innodb_file_per_table
을 삭제하고 서버를 다시 시작하거나 SET GLOBAL
명령에서 옵션을 해제하면 InnoDB
시스템 테이블 스페이스에 새 테이블을 만듭니다.
file-per-table 설정에 관계없이 InnoDB
테이블의 읽기 및 쓰기는 항상 실행할 수 있습니다.
테이블을 시스템 테이블 공간에서 자신의 테이블 스페이스로 이동하려면 또는 그 반대 방향으로 테이블을 이동하려면 innodb_file_per_table
설정을 변경하고 테이블을 다시 작성합니다.
-- Move table from system tablespace to its own tablespace. SET GLOBAL innodb_file_per_table=1; ALTER TABLEtable_name
ENGINE=InnoDB; -- Move table from its own tablespace to system tablespace. SET GLOBAL innodb_file_per_table=0; ALTER TABLEtable_name
ENGINE=InnoDB;
InnoDB
내부 데이터 사전 및 Undo 로그 를 시스템 테이블 공간에 배치하기 위해 항상이 테이블 공간이 필요합니다. .ibd
파일은 InnoDB
가 작동하는 데 충분하지 않습니다.
시스템 테이블 공간에서 자신의 .ibd
파일에 테이블이 이동 된 경우 시스템 테이블 스페이스를 구성하는 데이터 파일의 크기는 유지됩니다. 이전에 테이블이 점유 한 공간은 새로운 InnoDB
데이터 용으로 재사용 할 수 있지만 운영 체제 용으로 재사용되지 않습니다. 시스템 테이블 공간에서 디스크 공간이 제한되어있는 곳에 대규모 InnoDB
테이블을 이동하는 경우 innodb_file_per_table
을 선택하고 mysqldump 명령을 사용하여 인스턴스 전체를 다시 작성하는 것이 좋습니다.