EUC-KR로 encoding되어 있는 MySQL 3.x 데이타를 5.x으로 이전해야 할 일이 생겼다. ㅠㅠ 그래, 이왕 이전 하는 거 UTF-8으로 바꾸자 (사실 찾아 보니 이게 더 쉬울 것 같다. ㅋㅋ).
순서는 아래와 같다.

  1. MySQL 3.x로 부터 자료 dumping.
  2. Dump 된 파일 수정
  3. MySQL 5.x로 자료 올리기

척 보면 알겠지만 2번 작업이 이번 일의 핵심이다.
1번 dumping은 아래와 같이 쉽게 할 수 있다.

$ mysqldump -u USER -p DBNAME > DBNAME.dump.sql

 

사용자 계정 및 암호를 백업 하기 위해서는 mysql DB를 백업 해야 하는데, 이 경우 이미 Table이 생성되어 있을 것이다. 이때 아래와 같은 옵션을 줘서 백업 하도록 하자.

 

$mysqldump –add-drop-table -u USER -p mysql > mysql_root.sql

복구 하는 방법은 동일하다.

 

당연히 비밀번호를 입력해 줘야 한다. 이번일에는 이전해야 할 DB가 많아 아래와 같이 스크립트를 짜서 해결했다.

$ while read dbname do echo “Start dumping ${dbname}.” mysqldump -u ROOT_ID -p ${dbname} > ${dbname}.dump.sql done <<DBNAME accounts …… DBNAME

휴… 비밀번호 입력 하느라 힘들었다. 쩝…
다음으로 제일 중요한 dump 파일 수정이다.
일단 dump 파일 중 5.x에서 문제를 일으킬 수 있는 주석 부분을 제거 해 줘야 한다. SQL 문에서 주석은 C와 같이 ‘/* … */’로 쓰는 방법과 함께 주석 앞에 ‘–‘를 쓰는 방법이 있는데 아래 예의 1번과 같이 ‘———————————————————‘로 되어 있는 부분이 5.x에서는 문제를 일으킨다. 따라서, 1번 부분을 제거해 줘야한다. 그 다음에는 5.x에게 자료의 encoding이 EUC-KR임을 알려주기 위한 2번 부분, 또 새롭게 만드는 table들에 UTF-8 형태의 자료를 쓸 수 있도록 해주기 위한 3번 부분을 추가한다 (아래 예에서 제거되는 부분은 붉은 색으로, 추가되는 부분은 파란 색으로 표시하였다). 이때, 2번은 파일 맨 앞에서 한 번 만 추가해 주면 되지만 3번 부분은 매 create 문 마다 해 줘야 하기때문에 vim에서 정규식을 이용한 치환(:%s/\(TYPE=ISAM.*\);/\1 DEFAULT CHARSET=utf8;/)으로 한번에 해결 하였다. ㅋㅋ

SET NAMES euckr; <- 2 — MySQL dump 8.23 — — Host: localhost Database: accounts ——————————————————— <- 1 — Server version 3.23.58
— — Table structure for table a_00002
CREATE TABLE a_00002 ( number smallint(5) unsigned NOT NULL auto_increment, applicant varchar(16) NOT NULL default ”, …… timestamp timestamp(14) NOT NULL, PRIMARY KEY (number) ) TYPE=ISAM PACK_KEYS=1 DEFAULT CHARSET=utf8; <- 3
— — Dumping data for table a_00002 — ……

이제 파일을 수정했다면 3번 과정만이 남았다. 1번과 같이 아래의 명령으로 간단히 수행할 수 있다.

$ mysqladmin -u USER -p create DBNAME <- 1 $ mysql -u USER -p DBNAME < ${dbname}.dump.sql <- 2

위의 1번 명령은 해당 DB를 생성하도록 하는 것이고, 2번이 실제 자료를 MySQL에 넣도록 하는 명령이다.
이제 남은 일은 커피 한잔 마시며 자료가 잘 옮겨 졌는지 확인 하는 일… 음… 잘 됐군… ㅎㅎ

 

출처 : http://lthwkh.blogspot.kr/2009/09/mysql-3x-5x-migration.html