지난번 메일에 호응이 괜찮았던 것 같아, 앞으로 몇 번은 주제 별로 정리해서 메일을 써 볼까 합니다.
이번 주제는 MySQL 관리 입니다.
DBA / SE도 아닌 개발자가 MySQL 관리를 알아야 하느냐에 대해서는 이견이 있겠지만, 개인적인 견해로는 알아야만 한다.라는 쪽입니다.
DBA / SE는 일반적인 상황에 맞추어서 이야기 할 수 밖에 없기 때문입니다. 정확하게 우리 시스템을 진단하기 위해서는 개발자의 협조가 필수입니다.
오늘 공유할 도구들과 방법을 이용하시면, 시스템 안정화를 위해서 개발자가 해야 할 영역, DBA가 해야 할 영역, SE가 해야 할 영역을 이해하시는데 도움이 될 거라 생각합니다.
그럼, 본격적인 내용 공유 들어갑니다.
- Anemometer : http://github.com/box/anemometer
- Anemometer는 MySQL Slow Query Log에서 수집된 정보를 시각화 하고, 개별 Query Checksum에 대해 Comment 를 남길 수 있는 도구 입니다.
- PHP 기반으로 작성되어 있습니다. (따라서, 설치 시 php.ini에 date.timezone = "Asia/Seoul" 이 설정되어 있는지 확인해 보시기 바랍니다. 저는 nginx + php-fpm 조합으로 잘 사용 중입니다.)
- 설치시에, 선행으로 준비하셔야 하는 부분은 다음과 같습니다. ** PHP를 실행 할 웹 환경 (Apache + mod_php / Nginx + php-fpm 모두 정상 동작 확인 하였습니다.) ** MySQL ** pt-query-digest (이후에 설명할 Percona Toolkit에 포함되어 있습니다.)
- 홈페이지에 나와 있는 대로 설치 하시고, 기존 운영중인 서버의 slow query log를, 마찬가지로 홈페이지에 나와 있는 방식을 이용하여 pt-query-digest를 이용해 Anemometer용 DB에 넣습니다.
- 이후 스크린 샷 처럼, 개별 쿼리들의 정보를 검색하고, comment를 남길 수 있게 됩니다.
- Anemometer 설정 시에 추가 정보를 입력 해 놓으시면, 웹 상에서 클릭 한번으로 Execution Plan 을 뜨거나, pt-query-advisor를 통해 Static Analysis를 할 수 있습니다.
- Slow Query Log를 다루는 다른 도구들도 좀 있으나, Anemometer 만으로 충분 해 보입니다.
- Percona Toolkit : http://www.percona.com/software/percona-toolkit
- 이 도구는 원래 Baron Schwartz라는 분이 2006년에 MySQL 관리에 관한 문제를 해결하기 위해 만든 Maatkit의 후속 입니다.
- Baron Schwartz가 Percona에 입사하면서, Maatkit을 Percona Toolkit으로 바꿔 Percona 쪽에서 계속 버전업 중이고, 현재 메인 개발자는 Daniel Nichter입니다.
- 웹 용 데이터베이스라는 한정된 영역에서 MySQL은, Percona Toolkit을 쓸 때와 그렇지 않을 때 확연한 차이가 납니다. 편의성 부터 성능까지...
- 필수 도구이고, 꼭 사용에 익숙해 지시기 바랍니다.
- 개인적으로 제가 주로 사용하는 도구는 다음과 같습니다. ** pt-query-digest : 쿼리 실행 로그를 분석해서 Report를 생성해 줍니다. Anemometer는 pt-query-digest를 통해 생성된 데이터를 기반으로 동작합니다. ** pt-query-advisor : MySQL용 Static Analysis 도구라고 생각하시면 됩니다. 일반적으로 쿼리 작성시에 많이 하는 실수들을 지적해 줍니다. ** pt-mysql-summary : MySQL 상태에 대한 Summary Report를 생성해 줍니다. 가끔 실행해서 해당 서버의 상태를 파악하는 용도로 사용합니다. ** pt-online-schema-change : Table Lock 없이 ALTER 명령을 수행합니다. 기본적으로 MySQL이 ALTER 명령을 수행하는 것을 에뮬레이션 한다고 보시면 됩니다. 몇가지 제약조건이 있지만, 테스트 후 사용해 보시면 잘 동작할 겁니다. ** pt-deadlock-logger : MySQL에서 발생한 Deadlock 정보를 수집해서 Report를 생성합니다. 자세한 내용은 메뉴얼을 참고하세요.
- Percona XtraBackup : http://www.percona.com/software/percona-xtrabackup
- 마찬가지로, Percona에서 만든 도구 입니다.
- MySQL이 취약한 부분 중 하나인, 데이터 백업에 대한 이슈를 처리해 주는 고마운 도구 입니다.
- Hot Backup 으로 처리 가능하고, Backup 된 파일을 덮어 씌우는 것 만으로 MySQL DB 복원이 종료 됩니다.
- 기능이 많은 관계로, 자세한 내용은 메뉴얼을 참고하세요.
이 세가지 도구를 활용하기 시작하시면, MySQL에 관해서는 특별히 큰 일은 없을 겁니다. XtraBackup 쓰면 Replication DB 만드는 거야 뭐 걍 해도 되는 일이고... pt-online-schema-change 같은 도구 쓰시면 신경 쓸 부분 좀 줄어들고, Anemometer 이용하시면 전체 MySQL Database 들에 대해서 지속적인 slow query monitoring이 가능하니까요.
실무에서 MySQL 서버 사용시에 어떤 항목들을 모니터링 해야 하는가에 대한 부분은 양이 너무 늘어서 다음 기회에 공유하도록 하겠습니다.
아래는, 실무에서 사용 중인 Anemometer 화면 입니다.
1개의 의견 from SLiPP
좋은자료 감사합니다. 적용해봐야겠네요
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.