2013-06-06 2 views
9

이전에 mysql을 사용해 왔지만 내부적으로 어떻게 작동하는지 이해할 수 없습니다. 누군가가 디스크에있는 데이터의 내부 표현이 어떻게 보이는지에 대한 좋은 자료를 알려주고, 또한 사물이 너무 빨리 검색되고 액세스되는 방법을 논의 할 수 있습니까? 더 나은 방법은 누군가가 높은 수준의 간결한 설명을 제시 할 수 있습니까?mysql 데이터는 디스크에 어떻게 저장됩니까?

+0

이 질문에 영장 진짜 좋은 연구뿐만 아니라 질문의 응답 시간은 –

+0

책 "프로 MySQL은"아주 철저하게이 과정을 설명 http://dba.stackexchange.com에 더 적합 할 수 있습니다. – Marty

+0

IMHO 이것은 MyISSAM과 InnoDB의 구조를 사용하는 스토리지 엔진에 따라 다르다. 그러나 AFIK는 모든 D 또는 KD 나무를 사용합니다 (저는 지금 K에 대해 잘 모르겠습니다). – rekire

답변

12

MySQL 서버는 주로 서버의 데이터 디렉토리라고하는 단일 위치 아래에있는 디렉토리와 파일에 대해 여러 가지 방법으로 디스크 공간을 사용합니다. 서버는 데이터 디렉토리를 사용하여 다음을 모두 저장합니다.

  1. 데이터베이스 디렉토리. 각 데이터베이스는 데이터베이스에서 작성하는 테이블 유형에 관계없이 데이터 디렉토리 아래의 단일 디렉토리에 해당합니다. 예를 들어, 주어진 데이터베이스는 MyISAM 테이블, InnoDB 테이블 또는 그 둘을 섞어서 하나의 디렉토리로 표현된다.
  2. 테이블 구조에 대한 설명이 들어있는 테이블 형식 파일 (.frm 파일)입니다. 모든 테이블에는 적절한 데이터베이스 디렉토리에있는 자체 .frm 파일이 있습니다. 어느 스토리지 엔진이 테이블을 관리하든 상관 없습니다.
  3. 일부 저장소 엔진에서 각 테이블에 대해 데이터 파일과 인덱스 파일을 만들고 해당 데이터베이스 디렉터리에 저장합니다. 예를 들어, MyISAM 스토리지 엔진은 각 테이블에 대한 데이터 파일과 인덱스 파일을 생성합니다.
  4. InnoDB 스토리지 엔진에는 자체 테이블 공간과 로그 파일이 있습니다. 테이블 스페이스는 모든 InnoDB 테이블에 대한 데이터와 인덱스 정보는 물론 트랜잭션을 롤백해야 할 경우 필요한 실행 취소 로그를 포함합니다. 로그 파일은 커미트 된 트랜잭션에 대한 정보를 기록하며 데이터 손실이 발생하지 않도록 보장합니다. 기본적으로 테이블 공간과 로그 파일은 데이터 디렉토리에 있습니다. 기본 테이블 공간 파일의 이름은 ibdata1이고 기본 로그 파일의 이름은 ib_logfile0 및 ib_logfile1입니다. (InnoDB가 테이블마다 하나의 테이블 스페이스 파일을 사용하도록 InnoDB를 구성 할 수도있다.)이 경우, InnoDB는 주어진 테이블의 테이블 스페이스 파일을 테이블의 데이터베이스 디렉토리에 생성한다.
  5. 서버 로그 파일과 상태 파일. 이 파일에는 서버가 처리중인 명령문에 대한 정보가 들어 있습니다. 로그는 복제 및 데이터 복구, 쿼리 성능 최적화에 사용되는 정보를 얻고 운영 문제의 발생 여부를 확인하는 데 사용됩니다.
+0

조용한 많은 정보를 가지고 훌륭한 답변을하셨습니까? 가능한 경우 향후 연구를위한 참고 자료를 추가하십시오. – rekire

+0

MySQL 스토리지를 조사 할 때이 정보를 발견했습니다. 이것은 MySQL DBA 블로그 –

+0

@PeterVenderberghe 중 하나에서 언급되었습니다 ... –

관련 문제