MySQL 4.0.xx(26,27) 에서 MySQL 5.x.xx 로 마이그레이션 하기

|

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 [테이블명] 으로 테이블이 생성된 구조를 가져온다. 아래 구문을 따라하면 컨버팅이 이루어진다.
01.-- SHOW CREATE TABLE tablename;
02.-- 출력된 테이블 구조
03.CREATE TABLE `tablename` (
04.    `field1` int(10) NOT NULL DEFAULT '0',
05.    `field2` int(10) DEFAULT NULL,
06.    PRIMARY KEY (`field1`)
07.) TYPE=MyISAM DEFAULT;
08. 
09.-- 변경할 항목 : 이 구조문을 MySQL 5.x 서버에서 실행시킨다.
10.-- 변경항목은 TYPE=MyISAM 을 ENGINE=FEDERATED 로 하고
11.-- DEFAULT CHARSET = 사용하던캐릭터셋 을 추가 시킨다.
12.-- 그리고 CONNECTION='mysql://user:pass@host:port/dbname/tablename'
13.-- 을 추가 시킨다.
14.-- 그러면 아래와 같은 구문으로 작성이 될것이다. CONNECTION은 MySQL 4.x의 접속 정보이다.
15. 
16.CREATE TABLE `tablename_org` (
17.    `field1` int(10) NOT NULL DEFAULT '0',
18.    `field2` int(10) DEFAULT NULL,
19.    PRIMARY KEY (`field1`)
20.) ENGINE=FEDERATED DEFAULT CHARSET=euckr
21.CONNECTION='mysql://user@host:port/dbname/tablename';
22.-- 위와 같이 생성된 구조문을 실행시켜 테이블을 만든다.
23. 
24.CREATE TABLE `tablename` (
25.    `field1` int(10) NOT NULL DEFAULT '0',
26.    `field2` int(10) DEFAULT NULL,
27.    PRIMARY KEY (`field1`)
28.) ENGINE=MyISAM DEFAULT CHARSET = euckr;
29.-- DEFAULT CHARSET 은 이전 MySQL 4.x에서 사용하던 캐릭터셋으로 설정한다.
30.-- 데이터를 넣을 테이블이다.
31. 
32.INSERT INTO tablename SELECT * FROM tablename_org;
33.-- 위 구문을 실행시키면 FEDERATED 테이블에서 데이터가 MySQL 5 DB로 이전이 된다.
34. 
35.ALTER TABLE tablename DEFAULT CHARSET UTF8;
36.-- 위 구문을 실행시키면 UTF8로 데이터가 컨버팅 된다.
37. 
38.DROP TABLE tablename_org;
39.-- 컨버팅용으로 사용된 테이블을 삭제한다.
40.--

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

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

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

'DATABASE > MYSQL' 카테고리의 다른 글

MS-SQL 인덱스  (0) 2011.11.14
mysql 서버이전  (0) 2010.07.09
MySQL 명령어 정리  (0) 2008.09.10
MySQL 명령어 정리  (0) 2008.06.20
And