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;
![사용자 삽입 이미지](http://www.lovelgw.com/Blog/attach/1/2089633691.gif)
위와 같이 하면 기본적으로 지원 엔진에 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 |