1.2.2. 서로 다른 스토리지 엔진을 사용하는
마스터와 슬레이브 간의 리플리케이션 구성
리플리케이션 프로세스는 마스터 소스 테이블과 슬레이브 복제 테이블이 서로 다른 스토리지 엔진을 사용하는 것을 허용한다. 실제로, 시스템 변수 storage_engine와 table_type은 복제되지 않는다.
마스터와 슬레이브에 서로 다른 스토리지 엔진을 설정하는 방법은 초기에 리플리케이션 프로세스를 설정하는 방식에 따라 달라진다:
-
마스터 서버에서 mysqldump를 사용해서 데이터베이스 스냅샷을 만들었다면, 덤프 텍스트를 편집해서 각 테이블이 사용하는 엔진 타입을 변경시킬 수 있다.
또한, mysqldump를 사용하면 슬레이브에서 사용하고 싶지 않은 엔진을 비활성화 시킬 수 있다. 예를 들면, 슬레이브에 --skip-innodb 옵션을 추가하면 InnoDB 엔진이 비활성화된다. 지정 엔진이 존재하지 않는다면, MySQL은 디폴트 엔진 타입을 사용하고, 일반적인 경우에는 MyISAM이 디폴트 엔진이 된다.
-
슬레이브 퍼퓰레이션 (population)을 위해 로우 데이터를 사용한다면, 초기 테이블 포맷을 변경할 수 없게 된다. 대신에, 슬레이브가 시작된 후에 ALTER TABLE를 사용해서 테이블 타입을 변경하도록 한다.
-
새로운 마스터/슬레이브를 설정하는 경우에는, 새로운 테이블을 생성할 때 엔진 타입을 지정하지 않도록 한다.
이미 리플리케이션이 구동 중인 상황에서 현재 테이블의 엔진 타입을 다른 것으로 변경하고자 한다면 다음과 같이 한다:
1. 슬레이브를 중지 시킨다:
mysql> STOP SLAVE;
2. 엔진 타입을 변경하고자 하는 모든 테이블에 대해서 ALTER TABLE ... Engine='enginetype'을 실행한다.
3. 슬레이브 리플리케이션 프로세스를 다시 시작한다:
mysql> START SLAVE;
비록 storage_engine 및 table_type 변수는 복제되지 않지만, 엔진 상세 내역을 가지고 있는 CREATE TABLE 및 ALTER TABLE 명령문은 슬레이브에 정확하게 복제된다는 점을 알아두자. CSV 테이블을 실행한다고 가정하자:
mysql> ALTER TABLE csvtable Engine='MyISAM';
위의 명령문은 슬레이브에 복제가 되고, 이전에 슬레이브 테이블 타입을 CSV가 아닌 다른 엔진으로 변경했다고 하더라도 슬레이브 엔진 타입은 MyISAM으로 변경이 된다. 마스터와 슬레이브의 엔진 타입을 서로 다르게 계속 유지하고자 한다면, 마스터에서 새로운 테이블을 생성할 때 storage_engine 변수를 주의 깊게 사용해야 한다. 예를 들면, 아래의 명령문을 사용하는 대신에:
mysql> CREATE TABLE tablea (columna int) Engine=MyISAM;
다음과 같은 포맷을 사용하도록 한다:
mysql> SET storage_engine=MyISAM;
mysql> CREATE TABLE tablea (columna int);
이렇게 하면, 리플리케이션을 진행할 때 storage_engine 변수는 무시되고, CREATE TABLE 명령문은 슬레이브의 디폴트 엔진 타입을 사용해서 실행된다.