Webmin 제어판에 로그인하면 거의 모든 디스크 공간이 가득 찼습니다. 시스템에서 10 개의 가장 큰 파일 / 디렉토리를 검색 한 결과 ibdata1이라는 파일이 약 94GB의 공간을 차지한다는 것을 알았습니다. 내 / var / lib / mysql 디렉토리에 있습니다.
ibdata1의 기능은 무엇입니까? 제거해도 안전합니까? 내 가정은 그것이 일종의 덤프라고 생각하지만 그것은 단지 추측 일뿐입니다.
답변
파일 ibdata1
은 InnoDB 인프라의 시스템 테이블 스페이스입니다.
InnoDB에 필수적인 정보를위한 여러 클래스가 포함되어 있습니다.
- 테이블 데이터 페이지
- 테이블 인덱스 페이지
- 데이터 사전
- MVCC 제어 데이터
- 우주 취소
- 롤백 세그먼트
- 이중 쓰기 버퍼 (OS 캐싱을 피하기 위해 백그라운드에서 작성된 페이지)
- 버퍼 삽입 (보조 인덱스로 변경)
ibdata1의 위치는 InnoDB Universe (오른쪽)에 있습니다.
innodb_file_per_tableibdata1
을 활성화하여 데이터 및 색인 페이지를 분리 할 수 있습니다 . 이렇게하면 새로 생성 된 InnoDB 테이블이 외부 파일 에 데이터 및 인덱스 페이지를 저장 합니다..ibd
예
- datadir 은 / var / lib / mysql입니다.
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;
, 생성/var/lib/mysql/mydb/mytable.frm
- innodb_file_per_table 활성화, 데이터 / 인덱스 페이지 저장
/var/lib/mysql/mydb/mytable.ibd
- innodb_file_per_table 비활성화, ibdata1에 저장된 데이터 / 인덱스 페이지
- innodb_file_per_table 활성화, 데이터 / 인덱스 페이지 저장
InnoDB 테이블이 어디에 저장 되든지 InnoDB의 기능을 사용하려면 ACID 준수 및 트랜잭션 격리 를 지원 하기 위해 테이블 메타 데이터를 찾고 MVCC 정보를 저장 및 검색 해야 합니다.
다음은 ibdata1에서 테이블 데이터와 인덱스를 분리하는 방법에 대한 지난 기사입니다.
Oct 29, 2010
: StackOverflow의 내 원래 게시물Nov 26, 2011
: 파일의 라인 6308에서 오류 1114 (HY000) 및 user_analysis 테이블이 가득 찼습니다.Feb 03, 2012
: MySQL InnoDB에서 테이블의 예약 최적화Mar 25, 2012
: InnoDB는 왜 모든 데이터베이스를 하나의 파일로 저장합니까?Apr 01, 2012
: innodb_file_per_table이 권장됩니까?
다음에 무엇을할지
ibdata1을 계속해서 모든 것을 저장할 수는 있지만 LVM 스냅 샷을 만드는 것은 실제적인 일입니다 (개인의 견해).
My StackOverflow 포스트를 사용해야하며 해당 파일을 영구적으로 축소해야합니다.
이 쿼리를 실행하십시오 :
SELECT
((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;
InnoDB Cleanup을 적용한 후 얼마나 많은 공간을 확보 할 수 있는지 알려줍니다.
답변
이 파일은 ibdata1
아니고 ibdatal
모든 InnoDB 데이터베이스를 포함합니다. 삭제하면 모든 데이터가 손실됩니다.
이를 처리하는 방법에 대한 아이디어 는 MySQL에서 ibdata1 파일을 축소 / 제거하는 방법을 참조하십시오 .
답변
기본적으로 innodb를 MySQL 엔진으로 사용하면 모든 데이터베이스가 ibdata1에 저장됩니다 . 또한 ib_logfile0 및 ib_logfile1 로그 파일이 있습니다. 해당 파일을 삭제하지 마십시오.