MySQL 8.0의 InnoDB 테이블스페이스 파일 구조와 관리 기법

개요

MySQL 8.0에서 InnoDB 스토리지 엔진은 데이터베이스의 핵심 역할을 담당하며, 모든 테이블 데이터와 인덱스는专属 테이블스페이스 파일에 저장된다. 본 문서에서는 InnoDB 테이블스페이스 파일의 내부 구조와 효율적인 관리 방법을 상세히 다룬다.

InnoDB 테이블스페이스 파일의 정의

InnoDB 테이블스페이스 파일(.ibd)은 MySQL 8.0에서 테이블의 실제 데이터를 저장하는 물리적 파일이다. InnoDB 스토리지 엔진은 각 테이블에 대해 별도의 테이블스페이스 파일을 생성할 수 있으며, 이 파일에는 테이블의 모든 데이터 행, 인덱스 구조, 메타정보가 포함되어 있다.

독립 테이블스페이스模式下에서는 각 테이블이 개별적인 .ibd 파일을 보유하므로, 특정 테이블의 백업과 복원이 용이하다는 장점이 있다.

내부 구조 분석

.ibd 파일은 页(Page) 단위로 구성되며, 각 页의 기본 크기는 16KB이다. 주요 页 유형은 다음과 같다:

  • 데이터 页: 테이블의 실제 레코드 저장
  • 인덱스 页: B+트리 기반 인덱스 구조 저장
  • Undo 页: 트랜잭션 롤백을 위한 정보 저장
  • 시스템 页: InnoDB 내부 메타데이터 관리
  • 체인지 버퍼 页: 인덱스 수정 정보 임시 저장

이러한 页들은 B+트리 구조로 연결되어 있으며, 효율적인 데이터 접근을 가능하게 한다.

관리 방법론

테이블 생성 및 삭제

InnoDB 테이블 생성 시 자동으로 해당 테이블스페이스 파일이 생성된다. 다음 예제를 참조:

CREATE TABLE user_data (
    user_id INT PRIMARY KEY,
    username VARCHAR(100),
    email VARCHAR(150),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

위 SQL 실행 시 user_data.ibd 파일이 데이터 디렉토리에 생성된다. 테이블 삭제 시:

DROP TABLE user_data;

해당 테이블스페이스 파일도 함께 제거된다.

테이블스페이스 모드 설정

MySQL 8.0은 두 가지 테이블스페이스 관리 방식을 지원한다:

독립 테이블스페이스(File-Per-Table): 각 테이블마다 개별 파일 할당. 기본값이며 권장되는 방식이다.

공유 테이블스페이스: 모든 테이블이 ibdata1 파일을 공유한다.

설정 파라미터로 전환 가능:

[mysqld]
innodb_file_per_table = ON

성능 최적화 기법

테이블스페이스 최적화는 데이터베이스 성능 향상과 디스크 공간 효율화에 필수적이다.

테이블 재구성:

OPTIMIZE TABLE user_data;

테이블 통계 정보 갱신:

ANALYZE TABLE user_data;

테이블 무결성 검사:

CHECK TABLE user_data;
REPAIR TABLE user_data;

백업 및 복원 전략

독립 테이블스페이스模式下에서 특정 테이블만 선택적으로 백업할 수 있다.

백업 절차:

  1. MySQL 서비스 중지
  2. 대상 테이블의 .ibd 파일과 .frm(또는 SDI) 파일 복사
  3. MySQL 서비스 재시작

복원 절차:

  1. MySQL 서비스 중지
  2. 백업된 파일을 원본 디렉토리에 복원
  3. MySQL 서비스 재시작
  4. 다음 명령어로 테이블스페이스 임포트:
ALTER TABLE user_data IMPORT TABLESPACE;

태그: MySQL InnoDB 데이터베이스 테이블스페이스 백업

6월 22일 22:00에 게시됨