작성일 댓글 남기기

서버 이전 완료

3년 정도 cafe24에서 호스팅을 하다가 이번에 집에서 서버를 돌리게 됐습니다.
FTTH 들어온 기념으로 P4 3.0 메모리 3기가짜리 데스크탑에 sulinux 2.0 설치하고
DNS, FTP, SSH, APM 등 돌리고 있습니다.

웹하드 설치해서 사용할 예정이고 접속 속도는 cafe24 보다 훨씬 낫네요.

아직 DNS가 완벽하게 적용되지 않아서 일부 isp에서는 접속이 안되거나 cafe24로 접속이 될 수 있습니다.
KT라인에서는 적용이 되서 제대로 접속이 되네요.
이 글은 와이브로로 접속해서 쓰는 중입니다. ^^

그리고 이전하면서 텍스트큐브도 1.8.2로 업데이트 했습니다.

이제 이 서버는 블로그 겸 웹하드 겸 사진저장 서버로 쓸 예정입니다.

작성일 댓글 남기기

mysql UTF-8로 이전하기

[서버운영] utf-8 로 이전하기.[수정]  
 
 글쓴이   송효진  날 짜 07-12-17 11:15  조 회 613
 
 
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 버전이 있다.
 
  License
본 게시물은 GPL을 따릅니다. [ GPL 안내 ]  
 
 


  
   송효진   07-12-17 11:19  
음… euckr 용 php 글자자르기 함수에 문제가 있을 수 있겠네요.


my.cnf 에서 default-character-set 만 잘 맞춰주면,
DB 접속시에 set names utf8 은 안해도 될겁니다.
그래도 php 에다 저거 한줄 추가하는게 속 편할것 같네요.  
 
음… euckr 용 php 글자자르기 함수에 문제가 있을 수 있겠네요.


my.cnf 에서 default-character-set 만 잘 맞춰주면,
DB 접속시에 set names utf8 은 안해도 될겁니다.
그래도 php 에다 저거 한줄 추가하는게 속 편할것 같네요.
        
   전진하는아르고   07-12-17 12:07  
여러 도메인을 사용할때를 대비해서 한줄추가가 가장 속 편한듯 싶네요.  
 
여러 도메인을 사용할때를 대비해서 한줄추가가 가장 속 편한듯 싶네요.
  
   신의손   07-12-17 11:26  
스크랩했습니다. 이번 서버업글때 써먹어야겠네요.. 좋은정보 감사합니다.^^  
 
스크랩했습니다. 이번 서버업글때 써먹어야겠네요.. 좋은정보 감사합니다.^^
  
   허생   07-12-17 11:27  
예전에 UTF-8로 이전할때 파일을 하나하나 따로 열어서 속성을 변경해줬던 기억이 있는데…
이렇게 한방에 해결가능하군요… 역시 무식하면 손발이 고생~  
 
예전에 UTF-8로 이전할때 파일을 하나하나 따로 열어서 속성을 변경해줬던 기억이 있는데…
이렇게 한방에 해결가능하군요… 역시 무식하면 손발이 고생~
  
   송효진   07-12-17 11:41  
생각해 보니 iconv 로 해야 원하는 동작이 되어 살짝 수정했습니다.  
 
생각해 보니 iconv 로 해야 원하는 동작이 되어 살짝 수정했습니다.
        
   전진하는아르고   07-12-17 12:08  
쩝 근데… 이왕이면 페이지속의 메타태그도… ㅎㅎㅎ  
 
쩝 근데… 이왕이면 페이지속의 메타태그도… ㅎㅎㅎ
            
   송효진   07-12-17 12:51  
그건 되어 있어요.ㅎㅎ  
 
그건 되어 있어요.ㅎㅎ
                  
   전진하는아르고   07-12-17 14:27  
헉… 글쿤요.. 착각했네요.. 요즘 착각을 자주하는걸 보니… 명퇴할때가 되었나 쩝…  
 
헉… 글쿤요.. 착각했네요.. 요즘 착각을 자주하는걸 보니… 명퇴할때가 되었나 쩝…
  
   x딜마   07-12-17 11:46  
좋은 정보 감사 드립니다.
개발 한것 UTF용으로 변환 할려고 계획중이었는데.. 쉽게 처리 될것 같네요.  
 
좋은 정보 감사 드립니다.
개발 한것 UTF용으로 변환 할려고 계획중이었는데.. 쉽게 처리 될것 같네요.
  
   전진하는아르고   07-12-17 12:11  
참고로 저는 euckr에서 옮길때 sql 화일 덤프 받아서 set names euckr 주고 utf8 이 아닌 문서로 올렸더니
에러가 생겼습니다. 그래서 아예 utf8로 sql 파일을 변경하고 올립니다.  
 
참고로 저는 euckr에서 옮길때 sql 화일 덤프 받아서 set names euckr 주고 utf8 이 아닌 문서로 올렸더니
에러가 생겼습니다. 그래서 아예 utf8로 sql 파일을 변경하고 올립니다.
        
   송효진   07-12-17 12:54  
euckr 로 하는 이유는,
흔하지는 않지만 euckr 의 멀티바이트 코드 마저 escape 시켜버리는 것이 있습니다.
예를 들자면, ㅂㅞㄺ 인데 ?\\\’? 이런식이랄까요?
이건 변환이 안되지요.
그런데, euckr 로 넣으면 원래 그런 escape 기 때문에 동작을 합니다.
아마 오류가 스키마에서 났을듯 합니다.
예제에서처럼 분리하여 해 보시면 문제 없을듯 하네요.  
 
euckr 로 하는 이유는,
흔하지는 않지만 euckr 의 멀티바이트 코드 마저 escape 시켜버리는 것이 있습니다.
예를 들자면, ㅂㅞㄺ 인데 ?\\\’? 이런식이랄까요?
이건 변환이 안되지요.
그런데, euckr 로 넣으면 원래 그런 escape 기 때문에 동작을 합니다.
아마 오류가 스키마에서 났을듯 합니다.
예제에서처럼 분리하여 해 보시면 문제 없을듯 하네요.
  
   낭망백수   07-12-17 12:35  
전체적으로
버전 5.x 로의 이전에 해당하는 것과 UTF-8로의 이전에 해당하는 것을 좀 가릴 필요가 있겠는데요.
그리고 이왕이면 각 수정항목에 대한 설명도. ^^;;;


진짜 궁금한건 BINARY 를 왜 없애야하는지 궁금합니다.
전부터 궁금했는데 아직도 이유를 모르겠네요. 매뉴얼이나 MySQL 사이트설명도 애매하고. ㅋ


제가 생각하는 제일 간단한 방법은 밀어넣을때 setCharacter 지정하는 것이아니라
밀어넣는 것은 그대로 걍 sql로 밀어넣고
신버젼의 Database 만(스키마없이) UTF-8 로생성하고 나머지 그대로 걍 다 밀어넣는것입니다.
들어갈때 알아서 UTF-8 바뀌더군요.
(BINARY 는 바꾸지 않았는데 괜찮더군요. 앞으로 무슨 문제가 있을지 모르겠지만 ㅡㅡ;;)


꾸벅~!  
 
전체적으로
버전 5.x 로의 이전에 해당하는 것과 UTF-8로의 이전에 해당하는 것을 좀 가릴 필요가 있겠는데요.
그리고 이왕이면 각 수정항목에 대한 설명도. ^^;;;


진짜 궁금한건 BINARY 를 왜 없애야하는지 궁금합니다.
전부터 궁금했는데 아직도 이유를 모르겠네요. 매뉴얼이나 MySQL 사이트설명도 애매하고. ㅋ


제가 생각하는 제일 간단한 방법은 밀어넣을때 setCharacter 지정하는 것이아니라
밀어넣는 것은 그대로 걍 sql로 밀어넣고
신버젼의 Database 만(스키마없이) UTF-8 로생성하고 나머지 그대로 걍 다 밀어넣는것입니다.
들어갈때 알아서 UTF-8 바뀌더군요.
(BINARY 는 바꾸지 않았는데 괜찮더군요. 앞으로 무슨 문제가 있을지 모르겠지만 ㅡㅡ;;)


꾸벅~!
        
   송효진   07-12-17 12:54  
BINARY 는 말 그대로 바이너리 입니다.
캐릭터 취급을 안하지요. 캐릭터셋 변환이 안되요.
구 버전에서 BINARY 를 썼던 이유중 가장 큰것이,
latin1 으로 해서 정렬이 엉망이 되기 때문이었지요.


5.x 는 필수라고 생각해서 나누지는 않고 당의성에 대한 설명을 추가했습니다.  
 
BINARY 는 말 그대로 바이너리 입니다.
캐릭터 취급을 안하지요. 캐릭터셋 변환이 안되요.
구 버전에서 BINARY 를 썼던 이유중 가장 큰것이,
latin1 으로 해서 정렬이 엉망이 되기 때문이었지요.


5.x 는 필수라고 생각해서 나누지는 않고 당의성에 대한 설명을 추가했습니다.
            
   낭망백수   07-12-17 13:02  
그럼 binary packing 이 어떻게 이루어지는지 궁금하군요. unpacking 은?
(그런데 왜 저는 제대로 나올까요? ㅡㅡ;)


ps; 짐 free emeditor 기능제한이 뭐죠? 쓰다가 적응안되서 포기한 1人  
 
그럼 binary packing 이 어떻게 이루어지는지 궁금하군요. unpacking 은?
(그런데 왜 저는 제대로 나올까요? ㅡㅡ;)


ps; 짐 free emeditor 기능제한이 뭐죠? 쓰다가 적응안되서 포기한 1人
                  
   송효진   07-12-17 13:12  
PostgreSQL 과는 개념이 조금 다릅니다.
pgsql 에서는 bytea 로 패킹을 하지만,
MySQL 에서는 패킹하는것이 아니고, 그냥 binary 취급만 해 주는 것입니다.
varchar(1) binary 는 1byte 를 의미하게 되겠죠.


utf-8 로의 이전시에 iconv 로 변환하거나 한 적이 없는데,
set names euckr 로 잘 들어갔다면,
php 에서도 set names euckr 인 상태가 아닌지 확인이 필요하겠습니다.


emeditor free 는 tools 없고 (diff 등), 탐X기 마우스 우클릭에 메뉴 없다는것 정도 입니다.
트레이 아이콘 제공도 안하던가…
기본적으로 utf-8 이 아니기 때문에 옵션은 조금 손봐줄 필요가 있습니다.
가장 좋게 생각하는 기능이 우하단의 현재 캐릭터셋 표시를 더블클릭하면,
바로 어떤 캐릭터셋으로든 다시 불러올 수 있다는 것입니다.
다른 이름으로 저장시에 어떤 캐릭터셋으로도 변환할 수 있고요.  
 
PostgreSQL 과는 개념이 조금 다릅니다.
pgsql 에서는 bytea 로 패킹을 하지만,
MySQL 에서는 패킹하는것이 아니고, 그냥 binary 취급만 해 주는 것입니다.
varchar(1) binary 는 1byte 를 의미하게 되겠죠.


utf-8 로의 이전시에 iconv 로 변환하거나 한 적이 없는데,
set names euckr 로 잘 들어갔다면,
php 에서도 set names euckr 인 상태가 아닌지 확인이 필요하겠습니다.


emeditor free 는 tools 없고 (diff 등), 탐X기 마우스 우클릭에 메뉴 없다는것 정도 입니다.
트레이 아이콘 제공도 안하던가…
기본적으로 utf-8 이 아니기 때문에 옵션은 조금 손봐줄 필요가 있습니다.
가장 좋게 생각하는 기능이 우하단의 현재 캐릭터셋 표시를 더블클릭하면,
바로 어떤 캐릭터셋으로든 다시 불러올 수 있다는 것입니다.
다른 이름으로 저장시에 어떤 캐릭터셋으로도 변환할 수 있고요.
                      
   낭망백수   07-12-17 13:22  
오호~ 오호~ 연발이군요. 감사합니다. 스트랩도 하구요. ^^;  
 
오호~ 오호~ 연발이군요. 감사합니다. 스트랩도 하구요. ^^;
  
   하늘처럼™   07-12-17 13:09  
이제 스쿨이 utf-8로 가는 일만 남은거죠?  
 
이제 스쿨이 utf-8로 가는 일만 남은거죠?
        
   낭망백수   07-12-17 13:21  
ㅎㅎㅎㅎ.  
 
ㅎㅎㅎㅎ.
        
   전진하는아르고   07-12-17 14:28  
스쿨은 euc-kr 였군요…  
 
_PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG_