내 / var / lib / mysql 디렉토리에있는 ibdata1 파일은 무엇입니까? / 디렉토리를 검색

Webmin 제어판에 로그인하면 거의 모든 디스크 공간이 가득 찼습니다. 시스템에서 10 개의 가장 큰 파일 / 디렉토리를 검색 한 결과 ibdata1이라는 파일이 약 94GB의 공간을 차지한다는 것을 알았습니다. 내 / var / lib / mysql 디렉토리에 있습니다.

ibdata1의 기능은 무엇입니까? 제거해도 안전합니까? 내 가정은 그것이 일종의 덤프라고 생각하지만 그것은 단지 추측 일뿐입니다.



답변

파일 ibdata1은 InnoDB 인프라의 시스템 테이블 스페이스입니다.

InnoDB에 필수적인 정보를위한 여러 클래스가 포함되어 있습니다.

  • 테이블 데이터 페이지
  • 테이블 인덱스 페이지
  • 데이터 사전
  • MVCC 제어 데이터
    • 우주 취소
    • 롤백 세그먼트
  • 이중 쓰기 버퍼 (OS 캐싱을 피하기 위해 백그라운드에서 작성된 페이지)
  • 버퍼 삽입 (보조 인덱스로 변경)

ibdata1의 위치는 InnoDB Universe (오른쪽)에 있습니다.

InnoDB 아키텍처

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 테이블이 어디에 저장 되든지 InnoDB의 기능을 사용하려면 ACID 준수트랜잭션 격리 를 지원 하기 위해 테이블 ​​메타 데이터를 찾고 MVCC 정보를 저장 및 검색 해야 합니다.

다음은 ibdata1에서 테이블 데이터와 인덱스를 분리하는 방법에 대한 지난 기사입니다.

다음에 무엇을할지

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 로그 파일이 있습니다. 해당 파일을 삭제하지 마십시오.


답변