MySQL 고급

확인(pt-table-checksum)

pt-table-checksum이란?

  • percona 사에서 제공하는 percona tools 중 하나
  • 원래는 maatkit tools 의 부분인 mk-table-checksum
  • 마스터와 리플리케이션이 일치하는지를 파악하기 위한 도구

설치

다음 URL을 참고해서 percona tools를 설치한다.

http://www.percona.com/doc/percona-toolkit/2.0/installation.html

동작방법

  1. 마스터 서버에 데이터베이스 'percona' 그 안에 'checksums'를 생성한다. 
  2. 마스터 서버의 각 테이블의 checksum을 확인해 checksums에 기록해둔다.
  3. 리플리케이션을 통해서 테이블 checksums이 전파되면 pt-table-checksum은 각 슬레이브로 접근해서 슬레이브의 데이터와 리플리케이션을 통해서 만들어진 슬레이브의 'checksums' 테이블 간의 checksum을 비교한다.
  4. 그 결과를 화면에 출력한다.

권한

pt-table-checksum을 사용하려면 이 명령을 실행할 때 사용하는 계정이 각 서버마다 있어야 하고, 최소 아래와 같은 권한을 가지고 있어야 한다.

  • process
  • replication slave
  • replication client
  • select
  • insert
  • update
  • delete
  • create

다음 명령을 마스터에서 실행해서 checksum을 확인할 계정을 생성한다. 
이 명령은 슬레이브로 전파되면서 리플리케이션에 참여하는 모든 서버에 동일한 계정을 생성한다.
아래 명령은 다음을 전제로 한다.

  • 복제에 참여하는 모든 서버가 192.168.0.* 의 대역에 있다.
  • pt-table-checksum은 replicawatch라는 계정을 이용한다.
CREATE USER 'replicawatch'@'192.168.0.%' IDENTIFIED BY '111111';
GRANT CREATE, SELECT, INSERT, UPDATE, DELETE, PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replicawatch'@'192.168.0.%';
flush privileges;

실행

마스터의 host가 192.168.0.14이고 사용자가 test, 비밀번호가 database_password라고 할 때 아래와 같이 명령을 입력한다.

pt-table-checksum h=192.168.0.14,u=test2,p='database_password';

DIFFS 항목 중 0이 아닌 값이 나오면 실서버와 리플리케이션 간에 동기화에 문제가 발생한 것이다.
이런 경우 pt-table-sync를 이용해서 동기화를 할 수 있다.

댓글

댓글 본문
  1. 이두헌
    pt-table-checksum h=192.168.85.132,u=replicawatch,p='111111',P=13306
    체크시 아래와 같은 메세지가 나옵니다.

    Cannot connect to P=13306,h=,p=...,u=replicawatch
    Diffs cannot be detected because no slaves were found.

    아무래도 mysql 기본포트 3306 을 사용하지 않아서 그런거 같은데~
    해결 방법이 있는지요?
  2. f7000
    툴 다운로드 안되시면 아래와 같이 해주세요.
    sudo wget percona.com/redir/downloads/percona-toolkit/LATEST/deb/percona-toolkit_2.2.6_all.deb
  3. 마스터 노드에 쓰기가 없는 상태에서만 가능하다는 내용을 봤는데.. 마스터에 INSERT,UPDATE,DELETE는 lock 한 경우에만 사용이 가능한가요?

    http://helloworld.naver.com......777
  4. egoing
    수정 했습니다. 알려주셔서 고맙습니다 :)
    대화보기
    • 테이블에 CREATE 권한이 빠졌어요.. ^^