14.5.4 테이블 공간의 위치 지정
새로운 InnoDB
file-per-table 테이블 공간을 MySQL 데이터 디렉토리 외부의 특정 위치에 생성하려면 CREATE TABLE
문 DATA DIRECTORY =
절을 사용합니다. absolute_path_to_directory
미리 위치를 계획합니다. ALTER TABLE
문에서 DATA DIRECTORY
절을 사용할 수 없기 때문입니다. 지정하는 디렉토리는 고속 SSD 와 대용량 HDD 등의 성능이나 용량에 뛰어났다 특징이있는 다른 저장 장치에 넣을 수 있습니다.
MySQL은 원하는 디렉토리에 데이터베이스 이름에 해당하는 하위 디렉토리를 만들고 그 안에 새 테이블의 .ibd 파일 을 만듭니다. MySQL은 MySQL DATADIR
디렉토리 아래의 데이터베이스 디렉토리에 테이블의 경로 이름을 포함
파일을 만듭니다. .isl file 은 MySQL에 의해 심볼릭 링크처럼 처리됩니다. ( 실제 심볼릭 링크를 사용할 수 는 table_name
.islInnoDB
테이블에서는 지원되지 않습니다.)
다음의 예에서는 MySQL의 개발 또는 테스트 용 작은 인스턴스를 95 %가 사용 된 주 하드 드라이브를 탑재 한 노트북에서 실행하고 빈 공간이 많은 다른 저장 장치에 이름이 EXTERNAL
새로운 테이블을 배치하는 방법을 보여줍니다. 쉘 명령은 DATADIR
디렉토리 아래의 기본 위치에있는 LOCAL
테이블 및 지정된 위치에있는 EXTERNAL
테이블에 다양한 경로를 나타냅니다.
mysql> \! df -k . Filesystem 1024-blocks Used Available Capacity iused ifree %iused Mounted on /dev/disk0s2 244277768 231603532 12418236 95% 57964881 3104559 95% / mysql> use test; Database changed mysql> show variables like 'innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.00 sec) mysql> \! pwd /usr/local/mysql mysql> create table local (x int unsigned not null primary key); Query OK, 0 rows affected (0.03 sec) mysql> \! ls -l data/test/local.ibd -rw-rw---- 1 cirrus staff 98304 Nov 13 15:24 data/test/local.ibd mysql> create table external (x int unsigned not null primary key) data directory = '/volumes/external1/data'; Query OK, 0 rows affected (0.03 sec) mysql> \! ls -l /volumes/external1/data/test/external.ibd -rwxrwxrwx 1 cirrus staff 98304 Nov 13 15:34 /volumes/external1/data/test/external.ibd mysql> select count(*) from local; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.01 sec) mysql> select count(*) from external; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.01 sec)
먼저, MySQL은
.ibd
파일을 연 상태로 장치가 분리되지 않도록하고 있습니다 만, 서버가 사용 중이면 결과적으로 테이블을 닫게되는 경우가 있습니다. MySQL의 동작 중에 실수로 외부 장치를 분리하고 장치가 연결되어 있지 않을 때 MySQL을 시작하지 않도록주의하십시오. 관련.ibd
파일이 결여 될 때 테이블에 액세스하려고하면 서버를 다시 시작해야하는 심각한 오류의 원인이됩니다.그래도
.ibd
파일이 기대하는 경로에없는 경우, 서버 재시작이 실패 할 수 있습니다. 이 경우 수동으로 데이터베이스 디렉토리의
파일을 삭제하고 재부팅 후table_name
.islDROP TABLE
을 실행.frm
파일을 삭제하고 테이블에 대한 정보를 데이터 사전 에서 삭제합니다.NFS가 마운트 된 볼륨에 MySQL 테이블을 배치하지 마십시오. NFS는 메시지 전달 프로토콜을 사용하여 파일에 쓰기 위해 네트워크 메시지가 손실되거나 순서대로 수신하지 않으며 경우에 데이터의 일관성을 잃게되는 원인이 될 수 있습니다.
LVM 스냅 샷 파일을 복사하거나 다른 파일 기반 메커니즘을 사용하여
.ibd
파일을 백업하면 반드시 먼저FLUSH TABLES ... FOR EXPORT
문을 사용하여 메모리에 버퍼링 된 모든 변경 사항이 백업하기 전에 디스크에 플래시 되어 있는지 확인합니다.DATA DIRECTORY
절은 심볼릭 링크 사용 지원되는 대안입니다. 이것은 계속 문제가 있으며, 각InnoDB
테이블에 결코 지원되지 않았습니다.