MySQL 4.0.xx(26,27) 에서 MySQL 5.x.xx 로 마이그레이션 하기 위해서 DB덤프를 뜨고 캐릭터 셋을 설정하고 이런 번거로움을 MySQL 5.x에서 지원하는 federated 를 이용하여 손쉽게 마이그레이션을 할 수 있다.

단 , 전체 DB를 한번에 하기에는 스크립트를 이용하여 작성을 해야한다. 하지만 dump후 데이터의 변형 문제등을 해소하기 위해서는 그나마 좋은 방안으로 생각이 된다.

우선 MySQL 4.0.xx 데이터 베이스를 둔 상태에서 MySQL 5.x.xx DB를 다른 포트로 가동을 시켜준다 .

이렇게 준비를 하면 1단계 준비는 끝이다. 동일 서버가 될 수 있고 또는 그외 다른 서버에서 이전을 진행 할 수 있다. (물론 DB를 다른 서버에 이전하는 방안으로는 최고의 방법이 될것이다.)

MySQL 5 서버에 접속을 하여 federated 가 지원되는 지 확인을 먼저 해본다.
mysql> SHOW ENGINES;

사용자 삽입 이미지

위와 같이 하면 기본적으로 지원 엔진에 federated가 빠져 있음을 확인 할 수 있다.  mysql를 재구동 시켜 federated가 지원되도록 한다.

my.cnf 또는 mysqld 를 시작해주는 init.d 스크립트에 federated를 추가 시켜준다.
my.cnf

[mysqld]
federated

/etc/init.d/mysqld
$bindir/mysqld_safe --federated --defaults-file=/etc/my.ini
... 이하생략

위와같이 추가를 시켜 federated 를 추가된것을 다시 한번 확인한다.

이제 SHOW ENGINES 를 보면 FEDERATED 가 지원된다는것을 확인 할 수 있다. 이제 모든 준비가 다 되었다.

이제 FEDERATED테이블을 생성 시킬 차례이다.

이전 DB 4.0 으로 접속을 하여 SHOW CREATE TABLE [테이블명] 으로 테이블이 생성된 구조를 가져온다. 아래 구문을 따라하면 컨버팅이 이루어진다.
-- SHOW CREATE TABLE tablename;
-- 출력된 테이블 구조 
CREATE TABLE `tablename` (
	`field1` int(10) NOT NULL DEFAULT '0',
	`field2` int(10) DEFAULT NULL,
	PRIMARY KEY (`field1`)
) TYPE=MyISAM DEFAULT;

-- 변경할 항목 : 이 구조문을 MySQL 5.x 서버에서 실행시킨다.
-- 변경항목은 TYPE=MyISAM 을 ENGINE=FEDERATED 로 하고 
-- DEFAULT CHARSET = 사용하던캐릭터셋 을 추가 시킨다. 
-- 그리고 CONNECTION='mysql://user:pass@host:port/dbname/tablename' 
-- 을 추가 시킨다. 
-- 그러면 아래와 같은 구문으로 작성이 될것이다. CONNECTION은 MySQL 4.x의 접속 정보이다. 

CREATE TABLE `tablename_org` (
	`field1` int(10) NOT NULL DEFAULT '0',
	`field2` int(10) DEFAULT NULL,
	PRIMARY KEY (`field1`)
) ENGINE=FEDERATED DEFAULT CHARSET=euckr
CONNECTION='mysql://user@host:port/dbname/tablename';
-- 위와 같이 생성된 구조문을 실행시켜 테이블을 만든다. 

CREATE TABLE `tablename` (
	`field1` int(10) NOT NULL DEFAULT '0',
	`field2` int(10) DEFAULT NULL,
	PRIMARY KEY (`field1`)
) ENGINE=MyISAM DEFAULT CHARSET = euckr;
-- DEFAULT CHARSET 은 이전 MySQL 4.x에서 사용하던 캐릭터셋으로 설정한다. 
-- 데이터를 넣을 테이블이다.

INSERT INTO tablename SELECT * FROM tablename_org;
-- 위 구문을 실행시키면 FEDERATED 테이블에서 데이터가 MySQL 5 DB로 이전이 된다. 

ALTER TABLE tablename DEFAULT CHARSET UTF8;
-- 위 구문을 실행시키면 UTF8로 데이터가 컨버팅 된다. 

DROP TABLE tablename_org;
-- 컨버팅용으로 사용된 테이블을 삭제한다.
-- 


장점은 DB dump를 뜨지 않고 편리하게 새 서버로 이전이 가능한것이고 퍼포먼스 또한 프로그램을 이용하여 mbstring , iconv를 이용하여 컨버팅을 거치지 않고 MySQL 이 컨버팅을 해준다는점 그리고 문자열 깨짐이 없이 거의 완벽하게 이루어 진다는 점이다.

단점으로는 전체적으로 DB를 컨버팅을 하기에는 불편한점이 있어 스크립트를 이용해 한번에 한테이블씩 작업을 해야 한다는 점이다.

추 후 컨버팅을 할 수 있는 스크립트를 올려볼 예정이다

* 여기까지 봐주셔서 감사합니다 ^^

"MySQL" 카테고리의 다른 글

Trackback

Trackback Address :: http://www.lovelgw.com/Blog/trackback/146