유용한정보

[서버운영] euc-kr 자료를 utf-8 로 디비 데이타 이전하기

알 수 없는 사용자 2007. 12. 17. 16:58
utf-8 로 이전하기.

1. MySQL

- euckr 스키마 백업
mysqldump --all-databases --no-data --set-charset=euckr -p > backup.scheme.sql

- euckr 자료 백업
mysqldump --all-databases --no-create-db --set-charset=euckr -p > backup.data.sql

웬만하면 사용자계정 정보는 암호까지 확실하게 알고있자.
GRANT ALL 쿼리문을 직접 작성하여 가지고 있자.

- UTF-8 을 제대로 지원하기 위해 버전을 5.x 로 올린다.
(varchar(1) 은 1byte 가 아닌 한글자를 의미하게 된다.
set names 만으로 클라이언트의 캐릭터셋을 맞출 수 있다.)
= backup.scheme.sql =
테이블 중 BLOB 형식이나 BINARY 속성 필드에 문자열이 들어가는 곳이 있다면,
TEXT 형식으로 바꾸거나 BINARY 속성을 없앤다.
DEFAULT '0' 같은 잘못된 따옴표를 고친다.
TYPE=MyISAM 같은건 ENGINE=MyISAM 으로 수정한다.
맨 위쪽의 SET NAMES euckr 을 제외한 모든 CHARACTER SET 의 euckr 을 utf8 로 수정한다.

cat backup.scheme.sql | mysql -p

= backup.data.sql =
head backup.data.sql # 맨 위쪽에 SET NAMES euckr 이 있으면 충분하다.
cat backup.data.sql | mysql -p

- 사용자계정을 GRANT ALL 문으로 다시 만들어준다.
root 지워버리지 않게 주의.


이전 MySQL 에 charset 관련 옵션이 없다면,
스키마는
cat backup.scheme.sql | mysql -p --default-character-set=utf8
데이터는
cat backup.data.sql | mysql -p --default-character-set=euckr
로 복구하면 된다.
스키마는 꼭 꼼꼼히 살펴보고 편집하자.


2. 파일
모든 파일의 내용을 utf8 로 바꾸자.
조건에 따라 동작이 달라지므로 php 를 이용하자.
/toutf.php
<?php

$f = $_SERVER['argv'][1];
if(!file_exists($f)) {
    echo $f." file not found.\n";
}

$text = file_get_contents($text);
$text8 = @iconv('CP949', 'UTF-8//IGNORE', $text);

$cnt = strlen($text);
$cnt8 = strlen($text8);
if($cnt <= $cnt8) {
    // 제대로 변경이 되었다면 용량이 커졌을 것이다.
    // 용량이 같다면 한글이 없는 것이다.
    rename($f, $f.'.euckr'); // 백업
    file_put_contents($f, preg_replace('/charset=euc-kr/i', 'charset=utf-8', $text8));
    echo $f." file is converted.\n";
} else {
    // 용량이 작아진다면 잘못된 것이다.
    $fp = fopen('/error.txt', 'a');
    fwrite($fp, $f."\n");
    fclose($fp);
}

?>

find /home -type f -name "*.php" -exec php /toutf.php "{}" \;
find /home -type f -name "*.inc" -exec php /toutf.php "{}" \;
find /home -type f -name "*.txt" -exec php /toutf.php "{}" \;
find /home -type f -name "*.html" -exec php /toutf.php "{}" \;
find /home -type f -name "*.htm" -exec php /toutf.php "{}" \;
find /home -type f -name "*.js" -exec php /toutf.php "{}" \;
find /home -type f -name "*.css" -exec php /toutf.php "{}" \;


현재 UTF-8 이 아닌 곳이 없기 때문에,
기억을 더듬어 대충 만들었다.
적용전 백업은 필수다.

에디터는 EmEditor, DreamWeaver CS3 를 추천한다.
FTP 는 WinSCP 4 를 추천한다. 윈도 커멘더 모드로 하면 파일명이 지X 같아도 잘 올리고 받아질 것이다.

WinSCP 의 에디터로 EmEditor 를 설정하면 무적이다.
EmEditor 는 기능이 조금 제한된 free 버전이 있다.
(출처:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=58038&page=1)

반응형