14.6.2 다른 컴퓨터에 InnoDB 테이블의 이동 또는 복사
이 섹션에서는 일부 또는 모든 InnoDB
테이블을 다른 서버로 이동하거나 복사하는 방법에 대해 설명합니다.
예를 들어, MySQL 인스턴스 전체를 더 크고 빠른 서버로 이동하거나 MySQL 인스턴스 전체의 클론을 새로운 복제 슬레이브
서버로 만들거나 애플리케이션을 개발하고 테스트하기 위해 각 테이블을 다른 서버로 복사 하고 보고서를 생성하기 위해 데이터웨어
하우스 서버에 복사 할 수 있습니다.
InnoDB
테이블을 이동하거나 복사하는 방법은 다음과 같습니다.
Transportable Tablespaces
MySQL Enterprise Backup
Copying Data Files (Cold Backup Method)
Export and Import (mysqldump)
소문자 이름을 사용한 플랫폼 간 이동 또는 복사
Windows에서 InnoDB
는 항상 데이터베이스 및 테이블 이름을 내부적으로 소문자로 저장됩니다. 바이너리 형식의 데이터베이스를 Unix에서 Windows로 또는 Windows에서 Unix로 이동하려면 모든 데이터베이스 및 테이블을 소문자 이름을 사용하여 만듭니다. 이것을 실현하는 편리한 방법은 데이터베이스와 테이블을 작성하기 전에 my.cnf
또는 my.ini
파일의 [mysqld]
섹션에 다음 줄을 추가하는 것입니다.
[mysqld] lower_case_table_names = 1
운송 할 수있는 테이블 공간
MySQL 5.6.6에서 도입 된 이동 가능한 테이블 스페이스 기능은 서버 인스턴스에서 다른 서버 인스턴스로 복사하도록 InnoDB
를 준비 할 때 FLUSH TABLES ... FOR EXPORT
가 사용됩니다. 이 기능을 사용하려면 각 InnoDB
테이블이 자체 테이블 공간을 갖도록 innodb_file_per_table
를 ON
으로 설정 한 상태에서 InnoDB
테이블을 작성해야합니다. 사용법은 섹션 14.5.5 "테이블 공간의 다른 서버로 복사 (이동 가능한 테이블 스페이스)" 를 참조하십시오.
MySQL Enterprise Backup
MySQL Enterprise Backup 제품을 사용하면 실행중인 MySQL 데이터베이스 ( InnoDB
와 MyISAM
테이블을 포함)을 데이터베이스의 일관된 스냅 샷을 생성하면서 운영 중단을 최소화하여 백업 할 수 있습니다. MySQL Enterprise Backup이 InnoDB
테이블을 복사하는 동안은 InnoDB
테이블과 MyISAM
테이블에 대해 읽기와 쓰기를 계속할 수 있습니다. MyISAM
및 기타 InnoDB 이외의 테이블을 복사하는 동안 이러한 테이블에 대한 (쓰기가 아닌) 읽기가 허용됩니다. 또한, MySQL Enterprise Backup에서는 압축 백업 파일을 만들거나 InnoDB
테이블의 부분 집합을 백업 할 수 있습니다. MySQL 바이너리 로그와 결합 시점 복구를 실행할 수 있습니다. MySQL Enterprise Backup은 MySQL Enterprise 구독의 일부로 포함되어 있습니다.
MySQL Enterprise Backup에 대한 자세한 내용은 섹션 25.2 "MySQL Enterprise Backup" 을 참조하십시오.
데이터 파일의 복사 (콜드 백업 방식)
단순히 섹션 14.16 "InnoDB 백업 및 복구" 의 "콜드 백업"에 나열 된 관련 파일을 복사하기 만하면 InnoDB
데이터베이스를 이동할 수 있습니다.
MyISAM
데이터 파일과 마찬가지로, InnoDB
의 데이터 파일과 로그 파일에도 같은 부동 소수점 형식을 가지는 모든 플랫폼에서 바이너리 호환성이 있습니다. 부동 소수점 형식이 다른 경우에도 테이블에서 FLOAT
또는 DOUBLE
데이터 타입을 사용하지 않으면 절차는 동일합니다. 단순히 관련 파일을 복사하면됩니다.
.ibd 파일의 이식성 고려 사항
.ibd
파일을 이동하거나 복사 할 때 소스 시스템과 대상 시스템에서 데이터베이스 디렉토리 이름을 동일하게해야합니다. 데이터베이스 이름은 InnoDB
공유 테이블 공간에 저장되는 테이블 정의에 포함되어 있습니다. 테이블 공간 파일에 저장되어있는 트랜잭션 ID 및 로그 시퀀스 번호도 데이터베이스간에 다릅니다.
한 데이터베이스에서 다른 데이터베이스에 .ibd
파일과 연관된 테이블을 이동하려면 RENAME TABLE
문을 사용합니다.
RENAME TABLE db1.tbl_name
TO db2.tbl_name
;
.ibd
파일의 "깨끗한"백업이있는 경우는 다음과 같이 백업이 생성 된 MySQL 설치에 복원 할 수 있습니다.
.ibd
파일을 복사하면 테이블 스페이스에 저장된 테이블 ID가 변경되므로 나중에 테이블을 삭제하거나 잘라내는 실행되지 않았던 것입니다.다음
ALTER TABLE
문을 실행하여 현재의.ibd
파일을 삭제합니다.ALTER TABLE
tbl_name
DISCARD TABLESPACE;백업
.ibd
파일을 적절한 데이터베이스 디렉토리에 복사합니다.다음
ALTER TABLE
문을 발행하여이 테이블에서 새로운.ibd
파일을 사용하도록InnoDB
에 지시합니다.ALTER TABLE
tbl_name
IMPORT TABLESPACE;참고ALTER TABLE ... IMPORT TABLESPACE
기능은 가져온 데이터에 외부 키 제약 조건을 부과하지 않습니다.
이러한 맥락에서 "깨끗한" .ibd
백업 파일은 다음의 요건을 충족 파일입니다.
.ibd
파일에는 트랜잭션이 커밋되지 않은 변경 사항은 없습니다..ibd
파일에 병합되지 않은 삽입 버퍼 엔트리는 없습니다.퍼지하여
.ibd
파일에서 삭제 마크가 붙은 모든 인덱스 레코드가 삭제되었습니다.mysqld하여
.ibd
파일의 변경된 모든 페이지가 버퍼 풀에서 파일에 플래시되었습니다.
다음의 방법을 사용하면 깨끗한 백업 .ibd
파일을 만들 수 있습니다.
mysqld 서버의 모든 활동을 중지하고 모든 트랜잭션을 커밋합니다.
SHOW ENGINE INNODB STATUS
에 데이터베이스에 활성 트랜잭션이없는 것으로 나타나고InnoDB
의 메인 스레드 상태가「Waiting for server activity」
될 때까지 기다립니다. 그러면.ibd
파일의 복사본을 만들 수 있습니다.
.ibd
파일의 깨끗한 사본을 작성하기위한 또 다른 방법은 MySQL Enterprise Backup 제품을 사용하는 것입니다.
MySQL Enterprise Backup을 사용하여
InnoDB
설치를 백업합니다.두 번째 mysqld 서버를 백업에서 시작합니다. 서버에서 백업의
.ibd
파일이 정리됩니다.
가져 오기 및 내보내기 (mysqldump)
mysqldump를 사용하면 하나의 컴퓨터에서 테이블을 덤프 한 후 다른 컴퓨터에서 덤프 파일을 가져올 수 있습니다. 이 방식을 사용하면 형식이 다르다 여부와 테이블에 부동 소수점 데이터가 포함되어 있는지 여부는 중요하지 않습니다.
가져 트랜잭션에서 생성되는 거대한 롤백 세그먼트를위한 공간이 테이블 공간에 충분히 있다고 가정하면,이 방식의 성능을 향상시키는 방법 중 하나는 데이터를 가져올 때 자동 커밋 모드를 해제하려면 것입니다. 커밋은 전체 테이블 또는 테이블의 세그먼트를 가져온 후에 만 수행하십시오.