답변:
이것은 MySQL DBA 및 DBA StackExchange에서 수년에 걸쳐 다루어 왔던 가장 논란이 많은 주제 중 하나입니다.
온화하게 말하면, 단순히을 ibdata1을 축소 할 다른 방법이 없습니다 . 로 innodb_file_per_table 장애인 실행할 때마다 OPTIMIZE TABLE
InnoDB의 테이블은을 ibdata1 빠르게 성장한다. 사용하여 삭제 DROP TABLE
되고 DROP DATABASE
DML이 아닌 DDL이므로 롤백 할 수없는 데이터 Oracle과 MSSQL이 DDL을 롤백 할 수 있다고 생각합니다. MySQL은 그렇게 할 수 없습니다.
ibdata1에 상주하는 여러 종류의 정보가 있습니다
를 사용 innodb_file_per_table=1
하면 ibdata1 외부에서 생성되는 테이블 데이터 및 테이블 인덱스를 사용하여 새 테이블을 생성 할 수 있습니다. ALTER TABLE ... ENGINE=InnoDB;
또는을 사용하여 ibdata1 내부에있는 테이블을 추출 할 수 OPTIMIZE TABLE
있지만 ibdata1에서 사용 되지 않은 큰 공간이 남습니다.
그럼에도 불구하고 InnoDB 인프라를 정리해야합니다. 나는 이미 어떻게 그리고 왜 그렇게하는지에 대한 StackExchange 게시물을 작성했습니다.
May 21, 2012
: MySQL 데이터베이스는 덤프 파일을 기준으로 얼마나 큽니까?Apr 01, 2012
: innodb_file_per_table이 권장됩니까?Mar 25, 2012
: InnoDB는 왜 모든 데이터베이스를 하나의 파일로 저장합니까?Feb 04, 2011
: MySQL InnoDB-innodb_file_per_table 단점?Oct 29, 2010
: Howto : MySQL InnoDB 스토리지 엔진을 청소 하시겠습니까?데이터를 덤프하고 한 번 더 다시로드 한 후이 문제를 다시 방문하지 않아도됩니다 . OPTIMIZE TABLE
나중에 실행 하면 실제로 .ibd
InnoDB 테이블 의 테이블 스페이스 파일이 줄어 듭니다 .
my.cnf 기본 파일에서 다음 설정을 사용하지 않으면 InnoDB는 모든 InnoDB 테이블 만 ibdata1에 저장합니다.
innodb_file_per_table = 1
DROP TABLE (및 DROP DATABASE)은 롤백 할 수 없습니다.
이것이 ibdata1을 축소 할 수없는 이유는 아닙니다.
이것은 간략한 설명이지만 ibdata1에는 테이블 데이터 외에도 InnoDB 내부가 포함되어 있습니다. 내 이해에서 축소하려면 조각 모음이 필요하며 이는 지원되는 작업이 아닙니다.