Category Archives: 리눅스서버관리

[MySQL] MyISAM 방식의 테이블 복원하기

MySQL을 운영하다 보면 겪는 테이블 손상 혹은 크래시 문제를 결국에는 겪게 되는것 같습니다. 이것을 피하기 위해 잦은 백업도 필요할 것이고 문제 발생시에 복구 절차에 대해서도 항상 고민해 두어야 할것 같습니다. DB 복구는 DB운영시와 DB비운영시 두가지를 생각해 볼 수 있습니다.

1. MySQL 구동시

MySQL을 구동중이라면 MySQL에 접속하여 직접적으로 쿼리를 날리면 됩니다.
[code]CHECK TABLE {TABLE NAME}[/code]
위와같은 쿼리를 사용하면 테이블의 상태가 나옵니다. 보통 Status OK가 나오게 되며 큰 문제가 아닐 경우 Warning이 뜹니다. 하지만 문제가 심각할 경우 Error가 발생하게 됩니다. 이 Error가 발생한다면 꼭 문제를 해결하셔야 합니다.
[code]REPAIR TABLE {TABLE NAME}[/code]
위의 쿼리문으로 대부분의 문제는 해결될 수 있습니다. 복구하는김에 다음의 두가지 명령을 추가로 사용하여 테이블 상태를 정리해 주도록 합시다.
[code]OPTIMIZE TABLE {TABLE NAME}
ANALYZE TABLE {TABLE NAME}[/code]
이렇게 MySQL구동시에 작업을 해야 한다면 해당 테이블의 접근이 철저하게 봉쇄된 상태에서 해야 합니다. 될수 있으면 운영중인 서비스는 내리시길 권합니다.

2. MySQL 비구동시

MySQL이 비구동중이라면, 다른말로 MySQL이 구동중이 아니어야만 할 수 있는 복구 방법입니다. myisamchk라는 툴을 사용을 합니다. 이 툴은 MySQL설치시에 같이 설치 됩니다. 이 방법은 될 수 있으면 MySQL을 종료한 상태에서 수행하길 권합니다. (구동중에 수행해서 큰 문제는 없어보이긴 하지만 모두들 종료하길 권하더군요)
테이블명.*를 입력하려면 DB가 저장된 디렉토리 안에 들어가 데이터베이스명의 디렉토리 안으로 들어가셔서 수행을 하셔야 합니다.
[code]myisamchk -r {TABLE NAME}.*[/code]
위의 명령이 가장 기본적인 복구 명령입니다. 상황에 따라 다음과 같은 복구 옵션을 사용할 수 있습니다.
[code]myisamchk -o {TABLE NAME}.*[/code]
위의 o옵션은 안전모드에서 수행하라는 뜻이며 r옵션보다는 느리지만 좀 더 안정적으로 복구를 할 수 있다고 합니다. 또한 r에서 고치지 못하는 것을 추가적으로 고치기도 합니다.

3. 강제로 복구하기

위의 다양한 방법으로 복구되지 않을 경우 도전해 볼만한 강제적인 방법이 있습니다.
[code] myisamchk -r -f {TABLE NAME}.*[/code]
위의 방법을 시도하기 전에 꼭 백업을 해두시길 바랍니다.

[Fedora/CentOS/RHEL] OS의 패키지를 최신으로 업데이트할 수 있는 Les RPM de Remi

리눅스는 IDC에 두고 쓰던 서버에서 RedHat 6부터 설치하여 사용해 왔지만 RedHat의 유료 Enterprise Linux 정책으로 인해 사실상 다른 OS를 선택해야 하는 상황이 왔었습니다. 당시에 RedHat 9을 마지막으로 많은 분열이 일어나면서 비상업성을 띄는 Fedora, 상업성을 띄는 Enterprise Linux, Enterprise Linux의 클론본이라 불리는 CentOS와 WhiteBox가 그마나 선택해볼만한 선택지였습니다.

사용자 삽입 이미지
당시에는 몇번을 뒤엎어가며 여러 배포폰을 번갈아가며 사용해 보았습니다. 당시에 최초로 등장한 Fedora의 느낌은 뭐랄까 RHEL(RedHat Enterprise Linux)의 테스트버젼 같은 느낌이었습니다. 최대한 다양한 테스트 패키지를 시험적으로 돌려보고 장기 목표에서 괜찮은 성과를 내면 RHEL로 들어오는 그런 느낌이었습니다. 실제로 전세계의 대표서비스인 위키피디아의 대부분의 서버가 Fedora서버로 이루어져 있습니다. 하지만 간단히 웹서버를 구성하여 사용하기엔 너무나 많은 잡다한것이 설치가 되더군요. 아무리 최소설치를 해도 제 마음에는 들지 않았습니다. 패키지를 잘 커스터마이징 해서 쓴다거나 아예 신경을 끄면 될일이었을지도 모르겠지만 Fedora는 지금도 역시 저어게는 학습용 그 이상으로 선택되어지지 않습니다;
두번째로 WhiteBox부터 언급해 보겠씁니다. 당시에 CentOS보다 먼저 등장했던것으로 기억합니다. RHEL의 클론본이라고 자신있게 나왔지만 RHEL과는 너무나 달랐습니다. 클론이라기 보다는 흉내라고 부르는게 나았을지도 모르겠습니다.

다음은 CentOS입니다. 이것이 그나마 사실 가장 RHEL의 클론본에 가깝지 않았나 생각됩니다. 실제로 CentOS는 꽤 오래 써왔습니다.(한 6개월?) 많은 분들이 사용하고 계시지만 개인적으로 CentOS를 별로 좋아하지 않습니다. 이유는 CentOS는 순수하게 RHEL의 클론본이 아닙니다. 이것 역시 자신들의 철학이 많이 들어가 있습니다. 그리고 그것이 점점 심해지고 있지 않나 생각됩니다.

가장 기본적으로 최소설치를 해봐도 설치된 패키지에서 많은 차이가 납니다. 설정등에서도 많은 차이가 납니다. 그리고 무엇보다 CentOS를 사용하면서 원인을 알수 없는 문제를 여러번 겪었었습니다. 많은 기업에서 CentOS를 사용하고 계신것으로 알고 있습니다만 저는 CentOS를 신뢰하지 않습니다. 그래서 RHEL을 사용합니다.

사용자 삽입 이미지

하지만 RHEL에도 한계는 있습니다. 라이센스를 정상적으로 구매하여 사용한다면 문제될것이 없겠지만 그것이 아니라면 문제가 됩니다. 저같은 경우에는 개인적으로 업데이트 서버를 구축하여 사용하고 있고 중요 패키지는 직접 빌드하여 사용합니다. 하지만 덜 중요한것들에게는 시간을 투자하는것이 왠지 아깝기 마련입니다.

그래서 찾다 보니 괜찮은것을 발견하였습니다. 실제로 제 개인적으로 가지고 있는 서버에 적용하여 사용해 보았는데 아주 완벽하게 동작합니다. Fedora, CentOS, RHEL등을 매우 깔끔하게 지원합니다.

http://blog.famillecollet.com/


Remi의 RPM저장소쯤으로 보면 되겠네요. 프랑스쪽 사람이 운영자인듯 한데 다행이도 영어버젼의 홈페이지도 운영중입니다. RHEL5기준으로 yum이 설치되어있다고 가정하고 Remi 저장소를 연동하는 과정을 적어보겠습니다. [참고문서]
[code]wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm[/code]
저 과정만 거치면 기본적으로 필요한 설정이 알아서 끝나게 됩니다. /etc/yum.repo.d 디렉토리 안에 필요한 설정이 추가되게 됩니다. 이제 다음과 같은 명령으로 Remi 저장소에서 필요한 패키지를 설치하거나 업데이트 할 수 있습니다.
[code]yum –enablerepo=remi install <패키지명>[/code]
rpm에서 GPG키 관련 에러를 뱉을 경우 다음의 명령을 실행해 주시면 됩니다.
[code]rpm –import RPM-GPG-KEY-remi[/code]
몇일째 개인 서버에서 돌려본 소감은 개인이 운영함에도 불구하고 개인의 주관적인 철학이나 특정 +@가 전혀 없다는 점입니다. 어디서나 볼법한 깔끔한 패키지를 제공합니다. 실제로 사용해 보니 아주 만족스럽습니다. 하지만 실제 서비스중인 서버에 적용해도 될지에 대해서는 많은 고민이 필요할 것같습니다. 이 저장소를 사용함으로써 매우 최신의 패키지를 바로바로 업데이트 받아 사용할 수 있게 되었습니다.