본문 바로가기

DBMS/MySQL

[MySQL] InnoDB 파일 구조

반응형

개요

InnoDB 엔진을 사용하는 테이블의 파일 구조

구성 환경

Mysql-5.7 버전

 

각 Storage Engine 테이블의  파일 명명

InnoDB 테이블 : 테이블의 데이타는 테이블스페이스에 저장되고, 테이블 구조 파일은 database 디렉토리에 <테이블이름>.frm 형태로 존재

MyISAM 테이블 : 데이타베이스 디렉토리에 <테이블이름>.frm(테이블 구조 파일), <테이블이름>.MYD(데이타 파일), <테이블네임>.MYI(인덱스 파일) 형태로 존재

 

InnoDB 파일 구조

tablespace(system tablespace file + file-per-table tablespace + general tablespace + undo tablespace + Global Temporary Tablespace) + redo log file

1. tablespace

 1.1 system tablespace

  - 테이블스페이스 이름 : innodb_system

  - InnoDB Storage Engine을 사용하는 테이블의 데이타및 인덱스 저장, 하나 또는 그 이상의 data file로 구성됨

  - storage area for the InnoDB data dictionary, the doublewrite buffer, the change buffer, and undo logs

  - mysql 설치시 디폴트로 ibdata 파일이 있음

  - InnoDB table 생성시 TABLESPACE 옵션 지정하지 않으면  default taplespace 됨

  - 환경변수 : innodb_data_file_path, innodb_data_home_dir

    예) innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

 1.2 file-per-table tablespace

  - single InnoDB table로 데이타와 인덱스 포함

  - 환경변수 innodb_file_per_table = ON 으로 설정시 활성화 됨

  - 테이블 생성시 테이블의 구조 파일은 table_name.frm, 데이타 및 인덱스는 table_name.ibd 식으로 .frm, .ibd 확장자 이름으로 생성됨

 1.3 general tablespace 

  - 하나의 data file로 구성됨, shared tablespace로 create tablespace 명령어로 생성

  - system tablespace도 general tablespace에 포함됨

 1.4 undo tablespace

 - undo tablespace는 system tablespace 사용(8 미만 버전)

 - 환경변수 :  innodb_rollback_segments 

 1.5. Global Temporary Tablespace

   - 환경변수 : innodb_temp_data_file_path

2. redo log file

일반적인 작동에서는 테이블 데이타 변경 요청을 기록, crash recovery 동안에는 불완전한 트랜잭션의 의해 쓰여진 데이타를 정정

 - mysql 설치시 디폴트로 ib_logfile0,ib_logfile1 파일이 있음

 - 환경변수 :

   innodb_log_file_size : redo log 파일의 크기

   innodb_log_files_in_group : redo log 파일의 갯수

   innodb_log_group_home_dir : redo log 파일 생성 디렉토리

 

 

InnoDB 테이블스페이스, 테이블 관리

1. general tablespace 생성

 mysql> CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.ibd' ENGINE=INNODB;

 ** tablespace는 myisam 엔진을 사용할 수 없음

2. general tablespace 삭제

 mysql> drop tablespace ts1 ;

3. genreral tablespace 조회

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES where SPACE_TYPE='General' ;
+-------+------+------+-------------+------------+-----------+---------------+------------+---------------+-----------+----------------+
| SPACE | NAME | FLAG | FILE_FORMAT | ROW_FORMAT | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE | ALLOCATED_SIZE |
+-------+------+------+-------------+------------+-----------+---------------+------------+---------------+-----------+----------------+
|     3 | ts1  | 2048 | Any         | Any        |     16384 |             0 | General    |          4096 |    131072 |         131072 |
+-------+------+------+-------------+------------+-----------+---------------+------------+---------------+-----------+----------------+
1 row in set (0.00 sec)

mysql>

4. 모든 InnoDB tablespace 조회

mysql> select tablespace_name,file_name,file_type from information_schema.files ;

+------------------+-------------------------------+------------+
| tablespace_name  | file_name                     | file_type  |
+------------------+-------------------------------+------------+
| innodb_system    | /usr/local/mysql/data/ibdata1 | TABLESPACE |
| innodb_temporary | /usr/local/mysql/data/ibtmp1  | TEMPORARY  |
| ts1              | ./ts1.ibd                    | TABLESPACE |
+------------------+-------------------------------+------------+
3 rows in set (0.00 sec)

mysql>

5. table 생성시 TABLESPACE 지정

 mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 ;

6. table의 TABLESPACE 변경

 mysql> ALTER TABLE t1 TABLESPACE ts2 ;

 

반응형

'DBMS > MySQL' 카테고리의 다른 글

[MySQL] mysqldump 백업  (0) 2019.11.29
[MySQL] 바이너리 로그 파일  (0) 2019.11.28
[mysql] 기본 명령어  (0) 2019.11.27
[MySQL] mysql connector-J 설치  (0) 2019.09.20
[MySQL] 설치(Source Code)  (0) 2019.09.18