mysql 4.0 -> 5.1 이전 방법

리눅스/MySQL|2015. 1. 16. 11:26
반응형

MySQL 5.1 (euckr)로 이전하는것이라면 좀 쉽게 끝나는 경우가 있습니다.

 

우선 MySQL 4.0의 DB를 mysqldump 명령으로 덤프 받은후

그 파일을 vi 로 열어서 ' TYPE=MyISAM' 부분을 일괄 삭제하고 저장합니다.

그리고 MySQL 5.1 에 import 하면 끝납니다.

 

이 부분이 되지 않는 경우엔 아래 매뉴얼을 참고하여 진행하시면 됩니다.

 

실제 DB이전 경험을 토대로 작성하였지만 내용이 다소 어려울 수 있습니다.

추후 같은 작업시 제가 참고를 하고자 작성을 하는것이니

이전 작업중 일어나는 문제 해결에 대해서는 다른 매뉴얼을 참조하시기 바랍니다.

 

 

본 문서 습득 후 가능한 작업 두가지입니다.

1. MySQL 4.0 (euc_kr)    >    MySQL 5.1 (euckr)

2. MySQL 4.0 (euc_kr)    >    MySQL 5.1 (utf8)

 

euc_kr 에서 euckr 로 이전시 하단의 ++++++++ 표시 라인까지만 보시면 됩니다. ^^

> 이경우 문서에서는 구서버 데이타를 임시서버로 옮기게 되는데 임시서버를 신서버로 생각하시면 됩니다.

> utf8 로 이전시만 3대의 서버가 사용됩니다.

    (서버가 구서버와 신서버 이렇게 두 대라면, 신서버를 euckr 로 설치했다가 중간에 utf8로 다시 설치하시면 됩니다.)

 

 

구서버 (192.168.10.1)

MySQL 4.0.24 (euc_kr)

 

신서버 (192.168.10.2)

MySQL 5.1.52 (utf8)

 

임시서버 (192.168.10.3)

MySQL 5.1.52 (euckr)

  

작업했던 MySQL 버전은 위와 같습니다.

잘못알고 있는분도 계신데 4.0 이하 버전의 경우 정확히 말하면 euckr 이 아니고 euc_kr 입니다.

4.1 이상의 버전으로 업데이트 되면서 euckr 과 utf8 사용이 가능해졌습니다.

 

 

[진행순서]

아래 처럼 데이타를 dump 받아 임시서버로 이동합니다.

 

1. 구서버(115.68.10.1)에서
mysqldump --quote-names -p --all-databases > sysdocu.sql
rsync -avzPog sysdocu.sql root@192.168.10.3:/usr/local/src/

 

* --quote-names 옵션을 주는 이유는 테이블이나 컬럼이 MySQL 5.0 이상 버전에서

예약어로 사용되고 있을 경우 import 에러가 납니다. 이경우 ` 로 테이블이나 컬럼명을

감싸주게되면 MySQL 5.x 의 예약어일지라도 import 가능하게 됩니다.

이 옵션은 자동으로 ` 표시를 하여 dump 합니다.

 

 

2. 임시서버(192.168.10.3)에서
sysdocu.sql 을 vi 로 열고

CREATE DATABASE `mysql` 부분부터 376줄 삭제하고    // mysql DB를 삭제하는 부분입니다. 꼭 필요한 부분.
CREATE TABLE `keyword` 부분부터 5778줄 삭제    // keyword 테이블에서 계속 오류가 난다면 삭제 조치합니다.

                                                                                              추후에 rsync 명령으로 이 테이블만 이동 하도록 합니다.
 

위는 예입니다. CREATE DATABASE `mysql` 부분을 찾아서 해당 table 까지 없애줍니다.

그리고 아래 명령으로 import 를 하면 되는데, 혹시 오류가 나는 테이블이 있다면 위의 keyword 부분과 같이 삭제해줍니다.

MySQL 4.0 이하 버전과 MySQL 5.0.x 버전과 MySQL 5.1.x 이상 버전 컬럼 수가 모두 다르기 때문에

삭제를 하지 않을 경우 컬럼수가 맞지않아 import 가 되지 않습니다.

삭제 후 저장한 데이타를 아래명령으로 import 합니다.

 

mysql -p --default-character-set=euckr < sysdocu.sql

 

★그리고 계정 정보가 있는 구서버의 mysql DB와 임시서버의 mysql DB를 dump 받아

db 테이블, user 테이블의 컬럼 수를 조절하여 임시서버에 import 합니다.

(이 내용이 이해 안가시면 댓글 달아주세요. 자세히 작성해서 문서를 수정해 드리겠습니다. ^^)

 

★DB import 후 사이트에서 열었을때 웹소스 한글은 잘 보이나, DB내용만 깨지는 경우가 있습니다.

    euc_kr 에서 euckr 로 옮겼는데도요. IE에서 페이지 우클릭 > 인코딩을 utf-8 로 확인해보면 

    이번엔 웹소스 한글이 깨지고 DB에서 가져온 한글은 잘 출력이 됩니다.

    이럴때 해결책은 /etc/my.cnf 에 아래 두줄 추가 해주고 mysqld 재시작 해주세요. ^^


   default-character-set = euckr

   character-set-client-handshake = FALSE


 

3. 구서버(115.68.10.1)에서

위의 예와 같이 dump 파일을 수정하여도 import 가 잘 되지 않는 테이블이 있다면 수동으로 가져옵니다.

rsync -avzPog /usr/local/mysql/data/sysdocu/keyword.* root@192.168.10.3:/usr/local/mysql/data/sysdocu/

  

MySQL 4.0 (euc_kr) 에서 MySQL 5.1 (euckr) 로 데이타를 이전해 오는 것은 여기까지가 끝입니다. ^^

MySQL 5.1 (utf8) 로 이전하려고 한다면 계속해서 봐주세요.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

 

4. 임시서버(192.168.10.3)에서

데이타를 dump 받아 캐릭터셋 변경 작업을 진행합니다. 그리고 신서버로 데이타를 전송합니다.

 

mysqldump -p --default-character-set=euckr --all-databases > sysdocu_euckr.sql

iconv -c -f euckr -t utf8 sysdocu_euckr.sql > sysdocu_utf8.sql
vi sysdocu_utf8.sql    // 파일을 열어 euckr 이라는 부분을 utf8로 일괄 변경 합니다.

                                          일괄 처리 방법 (:%s/euckr/utf8/g)

rsync -avzPog sysdocu_utf8.sql root@192.168.10.2:/usr/local/src/

 

 

5. 신서버(192.168.10.2)에서

mysql -p --default-character-set=utf8 < sysdocu_utf8.sql

 

이렇게 작업은 끝이 납니다.

 

[중요]

사이트 테스트를 해보시고 혹시 웹소스(html 이나 php 등) 의 한글이 깨지게 된다면

1. 한글이 브라우저에서 잘 출력되기 위해 웹서버 설정파일(httpd.conf)에서  AddDefaultCharset utf-8 를 추가해줍니다.

2. 모든 웹소스의 인코딩을 일괄변경 처리합니다.

 

혹시 이 문서를 정독하신 분중에 MySQL 4.0 덤프파일을 가지고 iconv 를 이용해 utf8 변환을 하면 되지 않을까 생각하시는 분이

계실지 모르겠습니다.

제가 그렇게 해봤는데 잘 되지 않았습니다. ^^;

MySQL 4.0 (euc_kr) 에서 dump 받은 파일을 열어보면 캐릭터셋 지정하는 부분이 없었습니다.

MySQL 4.1 부터 dump 파일에 CHARSET=euckr 이런 부분이 생기기 때문입니다.

저부분을 CHARSET=utf8 로 수정을 해야 MySQL 5.1 (utf8) import 시에 테이블을 utf8형식으로 만들 수 있기 때문입니다.




--------------------

(질문)

★그리고 계정 정보가 있는 구서버의 mysql DB와 임시서버의 mysql DB를 dump 받아

db 테이블, user 테이블의 컬럼 수를 조절하여 임시서버에 import 합니다.

- 이 부분은 euc_kr에서 euckr 로 바꾸는 사람은 할 필요가 없는 부분인가요?? 이해가 안가서요...


(답변)

4.0 하고 5.1 의 db테이블, user테이블 컬럼수가 다릅니다.

실제로 두대의 서버에 각각 들어가 mysql 로그인을하고 use DB명 하신뒤,

desc db; 또는

desc user; 해보세요.

출력되는 라인이 틀립니다. (5.1버전이 더 많아요)


이럴경우 4.0에서 덤프받은 몇개 안되는 컬럼을 5.1에 넣게되면 컬럼수가 안맞는다고 오류메세지 나면서 insert가 되지 않기때문에

vi 에디터등을 이용해 수동으로 4.0 덤프파일의 컬럼수를 늘려주어야 합니다.


4.0의 DB 컬럼 갯수

INSERT INTO db VALUES ('%','sysdocu','sysdocu','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');


5.1의 DB 컬럼 갯수

INSERT INTO db VALUES ('%','sysdocu','sysdocu','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');


한눈에 보기에도 차이가 나요? 4.0에서 ,'Y','Y','Y','Y' 식으로 개수 맞춰서 더 추가해주어야 해요.

반응형

댓글()