2009년 02월 19일
[삽질로그]원총 홈페이지 이전 --(1) mysql data upgrade(3.23 --> 5.0)
얼마전 고려대 대학원 총학생회로부터 의뢰를 받은 내용이 있었으니, 그것은 홈페이지 서버를 이전한다는 것이었다.
원래는 2002년쯤 누군가가 만들어준 리눅스 서버를 컴실 구석에 박아두고 홈페이지를 운영하고 있었는데, 정전후 맛이 갔던 모양이다. 홈페이지 접속이 안되는 것이었다. 그래서 원총은 호스팅 업체 갑이야에 계정을 구매하여 홈페이지를 통째로 이전하고 싶어했다. 기본 HTML 외에는 그다지 해본 것이 없는 나로써는 좀 걱정이 되었지만 어떻게 되겠지 해서 선뜻 수락했다.
그러나, 문제가 한두가지가 아니었으니.. 지금부터 홈페이지 이전에 관련하여 내가 썼던 해법들을 여기에 정리해두고자 한다.
단 한사람에게라도 도움이 되길 바라며.
** 명령어를 그대로 입력했을때 Access denied같은 것이 뜬다면, root계정에 암호를 걸었는지 살펴보시기 바람. 암호를 걸면 -u root -p 등을 붙여야 하지만, 암호가 안걸려 있다면 -u root만 써야 함.. 만일 깔고 별다른 권한변경을 안했다면 -u, -p 옵션 없이 그대로 될 것임.
1. 기존 서버 상태
MySQL 3.23, PHP4.3, Apache2를 빨간모자(버젼 까먹음)위에 깔아 쓰고 있었음. php가 설치되지 않는 문제가 있었음. 즉, index.php를 인식하지 못하고.. 재설치 정도로 해결을 못봄.
한편, 갑이야에서는 MySQL database를 1개만 제공한다고 하여 일단 최악의 경우가 아닌한 기존 서버를 살려보기로 함. (현재 사용하는 db는 4개임)
2. 기존 서버 살리기.
최초 서버를 세팅해주셨던 분과 통화한 결과, 리눅스를 새로 까는 것이 낫다고 판단. 내가 깔아본 리눅스라면 우분투밖에 없음. 그래서 최신버젼 8.1을 깔고, 걍 MySQL 3.23, php4, Apache2를 깔기로 맘먹음. 그렇게 판단한 이유는 MySQL4.1 이후부터는 한글 인코딩 부분에 문제가 있고, 단순 덤프로 복원하는 데 문제가 있다는 판단 때문이었음.
그러나.. 문제가 있었으니, 그것은 우분투 8.10에서 MySQL 3.23은 커녕 MySQL 4.1조차 설치가 안된다는 것이었음. 가령, 아래와 같은 명령어로 깔 수 있다고 숱한 문서들에 나오나, 의존도가 어쨌대나.. 여하튼 안됨.
심지어는 처음에는 5.0조차 깔리지 않는것을 보고, 컴파일을 해보는 등 이것저것 해봐도 오히려 최신버젼조차 깔리지 않는 상태에 돌입해버림.
결국, 내가 리눅스에 취약하다는 것을 인정하고, 패러랠로 홈페이지 복원을 시험해본 후 그대로 서버에 적용하기로 결정함.
2-1. 패러랠즈에 ubuntu 설치
패러랠즈에 ubuntu 8.10을 설치. 일이 꼬일 때를 대비하여 최신패치 받은 상태를 카피떠둠. (패러랠즈는 이미지만 복사해두면 그 자체가 고스트이미지 같은 것이기 때문에 완전히 시스템 상태를 카피할 수 있음)
2-2. 패러랠 ubuntu상에서 apt-get 실험
apt-get으로 mysql에 관련된 엉뚱한 것을 미리 깔아버리면 깔리지도 않음. 패러랠 카피1 날리고 카피2에서 재시도. 그냥 mysql5를 바로 깔자 깔림; 버젼명을 명시하지 않으면 5.0을 깔음.
덤프떠둔 mysql 백업 파일은 그 자체가 일종의 배치파일처럼 되어 있는 거대한 텍스트 파일인데, 문제는 이것이 4.0까지만 작동한다는 것. 문제는 3.23은 커녕, 4.1도 안깔린다는 것. 게다가 문제는 덤프떠두고 원래 시스템을 날렸다는 것. 고심끝에 KLDP에 자문을 구해본 결과, 윈도 버젼 MySQL은 구하기도 쉽고 설치도 비교적 간단하다는 것을 알게 되어, 윈도에 이식하기로 결정.
3. MySQL 업그레이드(3.23->5.0)
3-1. mysql 3.23 설치하여 db복원
우선 MySQL의 옛날 버젼을 구글링으로 찾는 것은 생각보다 어려웠음. 나베르 파일자료실에 검색하자 주루룩 나옴. 진작 거기서 받을껄. 일단 3.23을 설치하고, 서비스모드로 실행. 그리고 덤프를 복원.
몇 가지 실험 결과 mysql에서 기본으로 설치해주는 database인 mysql, test를 날려보면 어떨까 생각하여 날림
3-2. mysql 3.23 -> 4.0
문서를 보니, 바로 5.0 같은 식으로 하지말고, 3.23->4.0, 4.0->4.1, 4.1->5.0으로 순차적으로 이동하라고 해서 그렇게 하기로 마음먹음. 일단 여기까지는 윈도우로 하고, 5.0에서 덤프를 뜬 뒤, 리눅스 서버에서 복원하려고 함.
4.0까지는 공식 홈페이지(http://dev.mysql.org)에서 지원하지 않으므로 나베르 파일자료실에서 구하고, 4.1부터는 공식 홈페이지에서 윈도우 인스톨 버젼으로 다운받음.
3-2-1. mysql 3.23 삭제
서비스 종료
3-2-2. mysql 4.0 설치, 덤프, 종료
인스톨러로 설치후, 3.23과 동일한 과정으로 서비스 시작.
db는 안날라가고 있음을 확인.
혹시 모르기 때문에 덤프를 떠둠.
3.23과 동일한 과정으로 서비스 종료, 서비스 제거, uninstall
3-2-3. mysql 4.1 설치, 덤프, 종료
인스톨러가 4.1부터 요즘 식으로 나타남.
대부분 디폴트를 선택하고, 기본 캐릭터셋만 euckr로 선택.
이젠 인스톨러가 서비스 모드를 시작시켜줌.
그런데, 에러가 발생... 그냥 설정 마법사를 뛰어넘고 앞과 같은 방법으로 서비스 등록, 실행하여 덤프를 뜸.
주의할 점은, 4.1부터 %program files%가 기본폴더가 된다는 것: 커스텀 설치를 선택하여 설치위치를 c:\mysql로 지정하자.
(나머지 대부분은 기본 지정되어 있던 것들을 사용)
여기부터 euc-kr 등의 문제가 발생하는데.. utf-8로도 떠놓아보기로 함.
우선, http://blog.lovetonight.net/blog/24 를 참조.
그런데.. 메모장으로는 멀쩡히 열리던 덤프파일들이 editplus에서는 인코딩을 뭘로 해도 안됨.. 그래서
메모장의 것을 복사한뒤 editplus에서 utf-8로 인코딩을 바꾸고 붙여넣기.
(70메가짜리라 상당히 오래걸렸음. 메모장은 윈도우에서 가장 잘 만든 프로그램이라는 평이 있음(물론 비꼬는 말임). 말을 안듣는다고 강종하지말고 느긋하게 기다리면 됨. )
검색하다가 메모장의 기본 인코딩이 cp949임을 알게 되어(지금까지는 euc-kr일 꺼라고 생각해왔음..) editplus의 인코딩을 경고를 무시하고 Korean949로 했더니 됨. 윈도 한글 기본 인코딩이 이거인 것 같음. smi 자막 파일 인코딩도 이거고.. 등등.
위 방법은 3.23, 4.0까지는 먹히는데, 4.1의 덤프파일에는 먹히지 않음을 확인.
구글링 결과, mysql 4.1부터는 기본 인코딩이 latin1에서 utf8이 되었음을 확인.
다시 덤프:
*** utf8로 변환하면서 위 링크글과 다르게 한 작업은 아래와 같음.
위의 문장에는 오해의 소지가 있는데, CREATE TABLE에도 DEFAULT CHARSET=latin1 이 있음. 즉,DB만드는 명령어뿐만 아니라 테이블 만드는 명령어도 그렇게 바꿔야 한다는 것임. 테이블 명령도 모두 utf8로 바꿈.
3-2-4. mysql 5.0 설치-업데이트-덤프.
이제 종착역이다. 메뉴얼을 보니 여기부터는 업데이트후 mysql_update 명령을 써서 내부 데이터 정합성을 체크해야 한다고 함.
여하튼, 일단 설치.
c:\mysql\bin 에 mysqld.exe가 없어서 잠깐 당황.. 잠시 침착하게 살펴보다 mysqld-nt.exe로 해보니 잘 됨.
서비스 설치, 서비스 시작.
mysql_update를 실행.
그런데 덤프에서 아래와 같은 에러가 발생
백신 프로그램에 예외를 걸어서 %WINDIR%\Temp 와, c:\mysql\data를 추가하면 정상작동함.

(난 알약과 V3을 쓰는데, 알약은 도저히 예외처리를 못하겠어서 실시간 감시를 껐음)
물론 Temp폴더는 바이러스가 숨기 좋은 곳이므로 mysql의 temp를 다른 폴더로 지정하고 그것을 예외로 하는 것이 좋겠지만.. 이놈을 서버로 쓸것도 아니고.. 단지 mysql 업그레이드를 하는 것일뿐.. (더 정확한 이유는 mysql의 temp폴더를 바꾸는 것을 찾기가 귀찮음;)
여하튼, 이놈도 세 가지 버젼의 덤프를 만듦.
1. latin1로 뜬 것(오리지날)
2. Editplus에서 utf8형식으로만 바꿔서 저장한 것.
3. default charset도 모두 utf8로 바꾼것
이렇게 해서 개당 70메가, 총 12개의 mysql dump 파일이 만들어졌다.
이제 나의 패러랠 ubuntu에서 작업해볼 차례다.
(일단 여기까지)
원래는 2002년쯤 누군가가 만들어준 리눅스 서버를 컴실 구석에 박아두고 홈페이지를 운영하고 있었는데, 정전후 맛이 갔던 모양이다. 홈페이지 접속이 안되는 것이었다. 그래서 원총은 호스팅 업체 갑이야에 계정을 구매하여 홈페이지를 통째로 이전하고 싶어했다. 기본 HTML 외에는 그다지 해본 것이 없는 나로써는 좀 걱정이 되었지만 어떻게 되겠지 해서 선뜻 수락했다.
그러나, 문제가 한두가지가 아니었으니.. 지금부터 홈페이지 이전에 관련하여 내가 썼던 해법들을 여기에 정리해두고자 한다.
단 한사람에게라도 도움이 되길 바라며.
** 명령어를 그대로 입력했을때 Access denied같은 것이 뜬다면, root계정에 암호를 걸었는지 살펴보시기 바람. 암호를 걸면 -u root -p 등을 붙여야 하지만, 암호가 안걸려 있다면 -u root만 써야 함.. 만일 깔고 별다른 권한변경을 안했다면 -u, -p 옵션 없이 그대로 될 것임.
1. 기존 서버 상태
MySQL 3.23, PHP4.3, Apache2를 빨간모자(버젼 까먹음)위에 깔아 쓰고 있었음. php가 설치되지 않는 문제가 있었음. 즉, index.php를 인식하지 못하고.. 재설치 정도로 해결을 못봄.
한편, 갑이야에서는 MySQL database를 1개만 제공한다고 하여 일단 최악의 경우가 아닌한 기존 서버를 살려보기로 함. (현재 사용하는 db는 4개임)
2. 기존 서버 살리기.
최초 서버를 세팅해주셨던 분과 통화한 결과, 리눅스를 새로 까는 것이 낫다고 판단. 내가 깔아본 리눅스라면 우분투밖에 없음. 그래서 최신버젼 8.1을 깔고, 걍 MySQL 3.23, php4, Apache2를 깔기로 맘먹음. 그렇게 판단한 이유는 MySQL4.1 이후부터는 한글 인코딩 부분에 문제가 있고, 단순 덤프로 복원하는 데 문제가 있다는 판단 때문이었음.
그러나.. 문제가 있었으니, 그것은 우분투 8.10에서 MySQL 3.23은 커녕 MySQL 4.1조차 설치가 안된다는 것이었음. 가령, 아래와 같은 명령어로 깔 수 있다고 숱한 문서들에 나오나, 의존도가 어쨌대나.. 여하튼 안됨.
sudo apt-get install mysql-server-4.1 mysql-client-4.1
심지어는 처음에는 5.0조차 깔리지 않는것을 보고, 컴파일을 해보는 등 이것저것 해봐도 오히려 최신버젼조차 깔리지 않는 상태에 돌입해버림.
결국, 내가 리눅스에 취약하다는 것을 인정하고, 패러랠로 홈페이지 복원을 시험해본 후 그대로 서버에 적용하기로 결정함.
2-1. 패러랠즈에 ubuntu 설치
패러랠즈에 ubuntu 8.10을 설치. 일이 꼬일 때를 대비하여 최신패치 받은 상태를 카피떠둠. (패러랠즈는 이미지만 복사해두면 그 자체가 고스트이미지 같은 것이기 때문에 완전히 시스템 상태를 카피할 수 있음)
2-2. 패러랠 ubuntu상에서 apt-get 실험
apt-get으로 mysql에 관련된 엉뚱한 것을 미리 깔아버리면 깔리지도 않음. 패러랠 카피1 날리고 카피2에서 재시도. 그냥 mysql5를 바로 깔자 깔림; 버젼명을 명시하지 않으면 5.0을 깔음.
sudo apt-get install mysql-server mysql-client그래서 큰맘먹고 mysql을 5.0으로 버젼업하기로 생각.
덤프떠둔 mysql 백업 파일은 그 자체가 일종의 배치파일처럼 되어 있는 거대한 텍스트 파일인데, 문제는 이것이 4.0까지만 작동한다는 것. 문제는 3.23은 커녕, 4.1도 안깔린다는 것. 게다가 문제는 덤프떠두고 원래 시스템을 날렸다는 것. 고심끝에 KLDP에 자문을 구해본 결과, 윈도 버젼 MySQL은 구하기도 쉽고 설치도 비교적 간단하다는 것을 알게 되어, 윈도에 이식하기로 결정.
3. MySQL 업그레이드(3.23->5.0)
3-1. mysql 3.23 설치하여 db복원
우선 MySQL의 옛날 버젼을 구글링으로 찾는 것은 생각보다 어려웠음. 나베르 파일자료실에 검색하자 주루룩 나옴. 진작 거기서 받을껄. 일단 3.23을 설치하고, 서비스모드로 실행. 그리고 덤프를 복원.
그러자 무슨무슨 테이블이 이미 있어서 추가가 안된다고 나옴.mysql -u root -p < backup.sqlc:\mysql\bin\mysqld --install
mysqladmin -u root password my_own_password
net start mysql
몇 가지 실험 결과 mysql에서 기본으로 설치해주는 database인 mysql, test를 날려보면 어떨까 생각하여 날림
mysql> drop database mysql;그러고 다시 복원하자 잘 됨.
mysql> drop database test;
3-2. mysql 3.23 -> 4.0
문서를 보니, 바로 5.0 같은 식으로 하지말고, 3.23->4.0, 4.0->4.1, 4.1->5.0으로 순차적으로 이동하라고 해서 그렇게 하기로 마음먹음. 일단 여기까지는 윈도우로 하고, 5.0에서 덤프를 뜬 뒤, 리눅스 서버에서 복원하려고 함.
4.0까지는 공식 홈페이지(http://dev.mysql.org)에서 지원하지 않으므로 나베르 파일자료실에서 구하고, 4.1부터는 공식 홈페이지에서 윈도우 인스톨 버젼으로 다운받음.
3-2-1. mysql 3.23 삭제
서비스 종료
net stop MySQL서비스 제거
c:\mysql\bin\mysqld --remove인스톨 버젼을 설치했으므로 프로그램 추가/제거에서 mysql을 제거
3-2-2. mysql 4.0 설치, 덤프, 종료
인스톨러로 설치후, 3.23과 동일한 과정으로 서비스 시작.
db는 안날라가고 있음을 확인.
혹시 모르기 때문에 덤프를 떠둠.
c:\mysql\bin\mysqldump --single-transaction --all-databases > krgs_backup_4.0.sql
3.23과 동일한 과정으로 서비스 종료, 서비스 제거, uninstall
3-2-3. mysql 4.1 설치, 덤프, 종료
인스톨러가 4.1부터 요즘 식으로 나타남.
대부분 디폴트를 선택하고, 기본 캐릭터셋만 euckr로 선택.
이젠 인스톨러가 서비스 모드를 시작시켜줌.
그런데, 에러가 발생... 그냥 설정 마법사를 뛰어넘고 앞과 같은 방법으로 서비스 등록, 실행하여 덤프를 뜸.
주의할 점은, 4.1부터 %program files%가 기본폴더가 된다는 것: 커스텀 설치를 선택하여 설치위치를 c:\mysql로 지정하자.
(나머지 대부분은 기본 지정되어 있던 것들을 사용)
여기부터 euc-kr 등의 문제가 발생하는데.. utf-8로도 떠놓아보기로 함.
우선, http://blog.lovetonight.net/blog/24 를 참조.
그런데.. 메모장으로는 멀쩡히 열리던 덤프파일들이 editplus에서는 인코딩을 뭘로 해도 안됨.. 그래서
메모장의 것을 복사한뒤 editplus에서 utf-8로 인코딩을 바꾸고 붙여넣기.
(70메가짜리라 상당히 오래걸렸음. 메모장은 윈도우에서 가장 잘 만든 프로그램이라는 평이 있음(물론 비꼬는 말임). 말을 안듣는다고 강종하지말고 느긋하게 기다리면 됨. )
검색하다가 메모장의 기본 인코딩이 cp949임을 알게 되어(지금까지는 euc-kr일 꺼라고 생각해왔음..) editplus의 인코딩을 경고를 무시하고 Korean949로 했더니 됨. 윈도 한글 기본 인코딩이 이거인 것 같음. smi 자막 파일 인코딩도 이거고.. 등등.
위 방법은 3.23, 4.0까지는 먹히는데, 4.1의 덤프파일에는 먹히지 않음을 확인.
구글링 결과, mysql 4.1부터는 기본 인코딩이 latin1에서 utf8이 되었음을 확인.
다시 덤프:
C:\mysql\bin>mysqldump --set-charset --default-character-set=latin1 --single-transaction --all-databases > krgs_backup_4.1.latin1.sql그랬더니 됨.
*** utf8로 변환하면서 위 링크글과 다르게 한 작업은 아래와 같음.
3-1. SET NAMES latin1; 으로 되어 있는 놈을 SET NAMES euckr; 로 변경합니다.--> SET NAMES utf8;로 되어 있어서 그대로 둠
3-2. CREATE DATABASE ..... DEFAULT CHARSET=latin1; 으로 되어 있는 놈을 CREATEDATABASE ..... DEFAULT CHARSET=utf8; 로 변경합니다. --> DEFAULT CHARACTER SET latin1; 로되어 있어서 나도 등호를 떼고 utf8로 붙임
위의 문장에는 오해의 소지가 있는데, CREATE TABLE에도 DEFAULT CHARSET=latin1 이 있음. 즉,DB만드는 명령어뿐만 아니라 테이블 만드는 명령어도 그렇게 바꿔야 한다는 것임. 테이블 명령도 모두 utf8로 바꿈.
3-2-4. mysql 5.0 설치-업데이트-덤프.
이제 종착역이다. 메뉴얼을 보니 여기부터는 업데이트후 mysql_update 명령을 써서 내부 데이터 정합성을 체크해야 한다고 함.
여하튼, 일단 설치.
c:\mysql\bin 에 mysqld.exe가 없어서 잠깐 당황.. 잠시 침착하게 살펴보다 mysqld-nt.exe로 해보니 잘 됨.
서비스 설치, 서비스 시작.
mysql_update를 실행.
c:\mysql\bin\mysql_update
그런데 덤프에서 아래와 같은 에러가 발생
mysqldump: Couldn't execute 'show fields from `zetyx_board_category_news`': Can't create/write to file 'C:\WINDOWS\TEMP\#sql_cfc_0.MYD' (Errcode: 13) (1)구글링해본 결과, http://bugs.mysql.com/bug.php?id=25872 : 백신 프로그램과 충돌한다는 사실을 알게 됨.
백신 프로그램에 예외를 걸어서 %WINDIR%\Temp 와, c:\mysql\data를 추가하면 정상작동함.

(난 알약과 V3을 쓰는데, 알약은 도저히 예외처리를 못하겠어서 실시간 감시를 껐음)
물론 Temp폴더는 바이러스가 숨기 좋은 곳이므로 mysql의 temp를 다른 폴더로 지정하고 그것을 예외로 하는 것이 좋겠지만.. 이놈을 서버로 쓸것도 아니고.. 단지 mysql 업그레이드를 하는 것일뿐.. (더 정확한 이유는 mysql의 temp폴더를 바꾸는 것을 찾기가 귀찮음;)
여하튼, 이놈도 세 가지 버젼의 덤프를 만듦.
1. latin1로 뜬 것(오리지날)
2. Editplus에서 utf8형식으로만 바꿔서 저장한 것.
3. default charset도 모두 utf8로 바꾼것
이렇게 해서 개당 70메가, 총 12개의 mysql dump 파일이 만들어졌다.
이제 나의 패러랠 ubuntu에서 작업해볼 차례다.
(일단 여기까지)
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- mysql - mysql DB가 안보일 때 by 루루모모
- [Mysql] Ubuntu에서 자동 설치 후 원격 접속 방법 by 지훈현서아빠
- mysql GUI tools by 우하하
- MySQL 루트패스워드를 잊어버렸을때... by 하나두리
- RHEL4 에서 Apache, PHP, MySQL 연동 설치. by itbaby
# by | 2009/02/19 05:59 | cs | 트랙백 | 덧글(2)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]