데이타베이스 관련 이런 저런 문제를 해결하다보니 데이타베이스의 오류복구 툴까지 관심을 가지게 되었네요.

MySQL의 에러로그를 살펴보니 몇개의 에러가 발생했더군요. 이게 데이타베이스 자체에서 발생한 문제인지를 살펴보기 위해 간단하게 데이타베이스 오류를 점검해보는 툴을 찾았습니다.

바로 mysqlcheck이란 툴인데요. 가변고 간단하게 사용할 수 있습니다. 이는 별도로 설치하는게 아니라 데이타베이스 설치 시 같이 설치되기 때문에 사용법을 익혀서 적용만 하면 됩니다.

1. MySQL 데이터베이스 오류 복구 및 최적화 툴 mysqlcheck

MySQL에서 자동으로 설치되는 mysqlcheck에서는 테이블이 손상 되었는지(check table), 손상된 테이블로 판면되면 자동으로 복구(repair table), 테이블 최적화(optimize table)해 속도를 개선하는 기능을 제공합니다.

mysqlcheck은 오직 서버가 구동되어 MySQL(또는 MariaDB) 데이타베이스가 작동되는 동안만 점검할 수 있습니다. 이와 유사한 기능을 하는 myisamchk은 서버가 작동하지 않는 동안에도 점검을 할 수 있다고 합니다.

mysqlcheck에서 사용 가능한 명령어는 아래와 같습니다.

명령어 수행 내용
-c, —check Check table for errors.
-a, —analyze Analyze given tables..
-o —optimize Optimize the tables.
-r, —repair Perform a repair that can fix almost anything except unique keys that are not unique.
—auto-repair If a checked table is corrupted, automatically fix it. Repairing will be done after all tables have been checked.
-A, —all-databases Check all the databases. This is the same as –databases with all databases selected.
-B, —databases Process all tables in the named databases. With this option, all name arguments are regarded as database names, not as table names.
—tables Overrides the –databases or -B option such that all name arguments following the option are regarded as table names.
-g, —check-upgrade Check tables for version-dependent changes. May be used with –auto-repair to correct tables requiring version-dependent updates.

2. 데이타베이스 테이블 오류 체크 및 자동 복구

저는 아직 한번도 격어보지는 못했지만 여러가지 이유로 데이타베이스 테이블이 손상될 수 있습니다. 이때 mysqlcheck로 테이블 손상 복구를 시도해 볼 수 있습니다.

이 때 사용하는 명령어는 아래와 같습니다.

mysqlcheck -u [DB계정] -p[패스워드] --auto-repair [DB명]

만약 데이타베이스 전체를 검사하고 싶다면 아래 명령어를 사용합니다.

mysqlcheck -u [DB계정] -p[패스워드] --auto-repair --all-databases

3. 데이타베이스 테이블 최적화

데이타베이스가 오래되면 파편화가 생길 수 있고, 어디인지 모르게 꼬일 수도 있습니다. 그래서 데이타베이스를 최적화 시켜주는데요.
이는 컴퓨터 하드디스크 정리와 비슷합니다. 컴퓨터 하드디스크에 기록되는 정보들은 순서대로 차곡차곡 정보가 쌓이는 것이 아니라 여기 저기 분산되어 빈 공간에 데이타를 저장하게 됩니다. 그러다보면 정보를 찾는데 시간이 걸리먄서 속도가 저하되는 것처럼 데이타베이스도 여기저기에 정보가 저장되다보면 속도가 느려지게 됩니다.

데이타베이스를 최적화하기 위해서는 아래 명령을 사용합니다.

mysqlcheck -u [DB계정] -p[패스워드] --optimize [DB명]

만약 데이타베이스 전체를 최적화하고 싶다면 아래 명령어를 사용합니다.

mysqlcheck -u [DB계정] -p[패스워드] --optimize --all-databases

이렇게 명령을 수행하다보면 “Table does not support optimize, doing recreate + analyze instead”라는 메세지를 만나게 되는데요. 이는 MariaDB에게는 이런 메세지를 보여준다고 합니다.

wp.wp_commentmeta
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_comments
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_links
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_options
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_postmeta
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_posts
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_term_relationships
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_term_taxonomy
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_termmeta
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_terms
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_usermeta
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
wp.wp_users
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK

4. 주기적으로 최적화하기

그러면 데이타베이스를 최적화한다면 조금 더 성능이 좋아진다고 하는데요. 이를 정기적으로 수행할 수 있는 방법이 없을까요?

바로 리눅스에서 제공하는 cron 명령을 사용하면 가능합니다.
매일 새벽 3시에 모든 데이타베이스를 최적화하고 오류가 있으면 자동으로 복구하도록 하겠습니다.

아래와 같이 cron에 등록해주면 매일 새벽 3시 30부나다 모든 데이터베이스를 최적화, 오류가 있으면 오류복구를 실행하게 됩니다.

먼저 cron에 주기적으로 최적화 및 오류 복구 명령을 수행하기 위해서 crontab -e 명령을 사용합니다.

crontab -e

그다음 cron에서 아래 명령을 추가합니다.

30 3 * * * /usr/bin/mysqlcheck -u root -p비밀번호 --auto-repair --optimize --all-database

이 작업을 하는데 아직 데이타베이스가 작아서인지 1분이 안걸리는군요.

광고 – Vultr 25$ 프로모션

Vultr에 관심이 있다면 아래 프로모션으로 Vultr에 가입해 보세요.
물론 그전에 더 좋은 프로모션이 있는지 체크해 봐야 합니다.

Vultr의 좋은 점이 다양한 프로모션이 많아서 초기에 저렴하게 이용할 수 있다는 점이었죠. 최근에는 그런 좋은 조건들이 많이 사라진 것 같긴 합니다.

25$ 프로모션으로 Vultr 가입하기