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" 카테고리의 다른 글
- MySQL Event (댓글 0개 / 트랙백 0개) 2010/06/08
- MySQL Foreign Key (댓글 0개 / 트랙백 0개) 2010/06/07
- MySQL DELETE JOIN (댓글 0개 / 트랙백 0개) 2010/06/16
- mysqlcheck (댓글 0개 / 트랙백 0개) 2010/07/28
- 바이너리 로그 비활성화 (댓글 0개 / 트랙백 0개) 2010/07/28
- MySQL root 비밀번호 분실시 (댓글 0개 / 트랙백 0개) 2009/04/16
- MySQL Update Join (댓글 2개 / 트랙백 0개) 2010/02/05
- MySQL 숫자형 데이터형의 괄호안의 의미 [INT(10)] (댓글 0개 / 트랙백 0개) 2010/07/26
- MySQL TABLE 정규화 (댓글 0개 / 트랙백 0개) 2010/06/05
- MySQL 사용자 추가 (댓글 0개 / 트랙백 0개) 2009/02/27
Trackback
Trackback Address :: http://www.lovelgw.com/Blog/trackback/146
