pt-table-checksum 사용

2024. 11. 16. 00:30MySQL/Class

반응형

# pt-table-checksum 은 master와 slave의 데이터 정합성이 맞는지 체크하는 percona에서 제공하는 툴입니다.

 

1. 실행조건

(1) root 권한과 비슷한 계정이 필요합니다. 그래서 super user 가 하나 더 있어야 합니다. (필자는 root 계정을 그대로 썼습니다.)

(2) 모든 서버가 접근이 가능할 수 있도록 호스트를 열어줘야 합니다.

mysql> select user,host from mysql.user;
+------------------+--------------+
| user             | host         |
+------------------+--------------+
| root             | %            |
| mhauser          | 172.16.173.% |
| replicator       | 172.16.173.% |
| mhauser          | localhost    |
| mysql.infoschema | localhost    |
| mysql.session    | localhost    |
| mysql.sys        | localhost    |
| root             | localhost    |
+------------------+--------------+
8 rows in set (0.01 sec)

- 필자는 root@'%' 계정을 하나 더 만들어서 어디서든 접근이 가능할 수 있도록 생성하여 사용했지만 절대 권장하지는 않습니다.

(3) 계정을 만든다면 아래와 같이 되지 않을까 생각됩니다.

mysql> create user percona@'%' identified with mysql_native_password by '1234';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON percona.* TO percona@'%';
Query OK, 0 rows affected (0.01 sec)

- 이렇게 권한을 주었지만, 분명 pt-table-checksum 을 실행시켰을 때 binlog-format=STATMENT 관련 에러가 날 것 입니다.

   이유는 이것까지 핸들링 할 수 있는 super 권한을 가진 user 가 필요하기 때문입니다. 필요한 권한을 계속 부여하면 될 것입니다.

 

(4) replicator 계정처럼 모든 master / slave DB에 동일한 계정이 필요합니다.

 

2. 실행

/mysql/percona/bin/pt-table-checksum --defaults-file=/etc/my.cnf --no-check-binlog-format --no-check-replication-filters --host=172.16.173.132 --user=root --password=1234 --databases=test --socket=/tmp/mysql_8033.sock --chunk-size=1000000

--host : master 의 ip 정보를 입력해주는 것이 좋습니다.

--chunk-size : 테이블이 헤비할 때 사용됩니다. 이것은 메모리의 공간을 좀더 확장을 해준다고 생각하면 될 것 같습니다.

chunk-size 옵션을 사용하지 않았을 때 발생된 에러입니다.

 

--no-check-binlog-format : binlog-format을 체크하지 않는다입니다.STATEMENT가 아니면 에러를 발생시킵니다.

--no-check-replication-filter :  my.cnf에 replication 관련 파라미터 중 skip-error 가 있다면, 에러가 나오기때문에 replication-filter도 체크하지 않습니다.

 

3. 결과값

결과값

 

해당 결과값을 모두 알지는 못하지만, DIFFS와 ROWS만 알아도 충분(?)하지 않을까 생각됩니다. 다른 결과값에 대해서는 기회가 되면 좀더 알아보도록 하겠습니다^^;

 

우선 ROWS 는 --host에 적은 DB서버의 전체 로우수를 알려줍니다.

DIFFS는 마스터와 슬레이브의 데이터가 동일한지 체크한 결과값입니다. 0이면 동일한 것이고, 1이면 다르다는 것입니다.

해당 테이블에 대해서 좀 더 집중적으로 핸들링하여 오차 데이터를 찾을 수 있을 것입니다.

 

4. 결론

master 와 slave 의 모든 테이블, 데이터의 정합성을 하나하나 체크하기는 정말 어렵습니다. 그만큼 다른 데이터를 찾는다는 것은 쉽지가 않습니다. pt-table-checksum을 사용한다면 적어도 데이터가 다른 테이블은 쉽게 체크가 가능하기 때문에 유용한 Tool 이 아닐까 생각합니다.

반응형