>  기사  >  데이터 베이스  >  pt-table-checksum 검증 및 pt-table-sync 복구 데이터

pt-table-checksum 검증 및 pt-table-sync 복구 데이터

巴扎黑
巴扎黑원래의
2017-06-23 15:06:091416검색
1
sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum list | grep percona-toolkit
그런 다음 설치
percona-toolkit.noarch 3.0.0-rc percona-release-noarch
(2) 설치 패키지의 압축을 푼다:
sudo yum install percona-toolkit
지금까지 percona의 toolKit 도구 패키지가 설치되었습니다. pt-table-checksum Verification 및 pt-table-sync. 전자는 주로 마스터와 슬레이브의 일치 여부를 확인하는 데 사용됩니다. 후자는 주로 데이터를 복구하는 데 사용됩니다. 불일치.

pt-table-checksum은 마스터-슬레이브 데이터의 일관성을 확인하기 위해 percona에서 제공하는 도구입니다. 우리는 마스터 라이브러리를 가리키고 슬레이브 라이브러리의 결과 집합을 판단하여 불일치가 포착되면 이를 다시 우리에게 피드백합니다. , 0이 아닌 결과를 반환합니다. 그러나 데이터 문제를 복구하려면 pt-table-sync를 사용해야 합니다.
pt-table-checksum은 실행 시 명령문 복사 형식을 기반으로 합니다. ROW 형식을 사용하는 경우 실행 시 --no-check-binlog-format 매개 변수를 추가해야 합니다.

3: pt-table-checksum 연습은 설치 후 바로 사용할 수 있습니다. 저는 두 번째 방법을 사용하고 있습니다
[root@localhost home]# cd toolkit/[root@localhost toolkit]# ls
percona-toolkit-2.2.19.tar.gz[root@localhost toolkit]# tar -xvf percona-toolkit.tar.gz

특정 라이브러리를 별도로 확인할 수도 있으므로 범위를 좁힙니다. 검사:
[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format h=172.16.16.35,u=root,p=123456,P=3306TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE06-07T10:55:49 0 0 1 1 0 1.331 MAXIANGQIAN.MAXIANGQIAN06-07T10:55:54 0 0 1 1 0 5.524 maxiangqian.test06-07T10:55:56 0 0 4 1 0 1.208 maxiangqian.test0106-07T10:55:57 0 0 0 1 0 1.164 mysql.columns_priv06-07T10:55:58 0 0 5 1 0 1.216 mysql.db06-07T10:55:59 0 0 2 1 0 1.176 mysql.engine_cost06-07T10:56:00 0 0 0 1 0 1.178 mysql.event06-07T10:56:01 0 0 0 1 0 1.160 mysql.func06-07T10:56:03 0 0 1 1 0 1.154 mysql.gtid_executed06-07T10:56:08 0 0 40 4 0 5.015 mysql.help_category06-07T10:56:13 0 0 679 5 0 5.806 mysql.help_keyword06-07T10:56:18 0 0 1334 4 0 4.572 mysql.help_relation06-07T10:56:19 0 0 635 1 0 1.169 mysql.help_topic06-07T10:56:20 0 0 0 1 0 1.163 mysql.ndb_binlog_index06-07T10:56:22 0 0 0 1 0 1.157 mysql.plugin06-07T10:56:23 0 1 48 1 0 1.236 mysql.proc06-07T10:56:24 0 0 0 1 0 1.197 mysql.procs_priv06-07T10:56:25 0 0 1 1 0 1.235 mysql.proxies_priv06-07T10:56:26 0 0 6 1 0 1.188 mysql.server_cost06-07T10:56:28 0 0 0 1 0 1.154 mysql.servers06-07T10:56:34 0 0 1 1 0 6.184 mysql.tables_priv06-07T10:56:35 0 0 0 1 0 1.198 mysql.time_zone06-07T10:56:36 0 0 0 1 0 1.121 mysql.time_zone_leap_second06-07T10:56:37 0 0 0 1 0 1.148 mysql.time_zone_name06-07T10:56:38 0 0 0 1 0 1.147 mysql.time_zone_transition06-07T10:56:40 0 0 0 1 0 1.138 mysql.time_zone_transition_type06-07T10:56:41 0 0 8 1 0 1.336 mysql.user06-07T10:56:42 0 0 0 1 0 1.164 open_api.ma06-07T10:57:01 0 0 1000000 13 0 18.707 sbtest.sbtest06-07T10:57:02 0 0 6 1 0 1.263 sys.sys_config

얻은 결과는 위와 같습니다. 설명을 살펴보세요.
TS: 검사가 완료된 시간입니다. ERRORS: 검사 중에 발생한 오류 및 경고 수입니다. DIFFS: 0은 일관성을 의미하고 1은 일관성이 없음을 의미합니다. --no-replicate-check가 지정되면 항상 0이 됩니다. --replicate-check-only가 지정되면 다른 정보가 표시됩니다. ROWS: 테이블의 행 수입니다. CHUNKS: 테이블로 분할된 블록의 수입니다. SKIPPED: 오류나 경고로 인해 또는 너무 커서 건너뛸 블록 수입니다. TIME: 실행 시간. TABLE: 검사 중인 테이블의 이름입니다.
그런 다음 다음 주요 매개변수를 살펴보세요.
[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format --databases=maxiangqian h=172.16.16.35,u=root,p=123456,P=3306
--replicate=rep_test.checksums 매개변수를 지정하면 데이터베이스가 자동으로 생성되어 체크섬 테이블에 기록됩니다.

체크섬 테이블의 정보를 보려면 SLAVE의 해당 라이브러리에 들어가십시오.

--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。--replicate-check-only :只显示不同步的信息。 --replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。 --databases= :指定需要被检查的数据库,多个则用逗号隔开。--tables= :指定需要被检查的表,多个用逗号隔开 h=127.0.0.1 :Master的地址
u=root :用户名
p=123456 :密码
P=3306 :端口
위의 this_crc <> 청크를 통해 이 테이블의 어떤 블록에 일관성 없는 레코드가 있는지 알 수 있습니다.

4: 데이터 불일치를 감지하고 pt-table-sync를 사용하여 복구합니다.
이전 섹션을 살펴보겠습니다. 다음 명령문을 통해 데이터가 일치하지 않음을 감지했습니다.
mysql> select * from checksums where this_cnt<>master_cnt;

일관되지 않은 복원 data :
[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format --databases=maxiangqian h=172.16.16.35,u=root,p=123456,P=3306TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE06-07T11:13:18 0 0 1 1 0 1.220 MAXIANGQIAN.MAXIANGQIAN06-07T11:13:19 0 1 1 1 0 1.135 maxiangqian.test06-07T11:13:21 0 0 4 1 0 1.197 maxiangqian.test01
자체적으로 테스트 테이블에 한 행의 데이터가 누락되었습니다. 실행 후 본문과 복사본의 데이터가 일치합니다.

다음으로 pt의 몇 가지 사용 사례를 살펴보겠습니다. -table-sync:

(1) 호스트 1의 데이터를 호스트 2에 동기화하고 db.tbl 테이블만 동기화합니다
[root@localhost bin]# clear[root@localhost bin]# ./pt-table-sync --execute h=172.16.16.35,P=3306,D=maxiangqian,t=test,u=root,p=123456 h=172.16.16.34,P=3306,u=root,p=123456 --no-check-slave --print[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format --databases=maxiangqian h=172.16.16.35,u=root,p=123456,P=3306TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE06-07T11:18:09 0 0 1 1 0 1.172 MAXIANGQIAN.MAXIANGQIAN06-07T11:18:10 0 0 1 1 0 1.144 maxiangqian.test06-07T11:18:11 0 0 4 1 0 1.282 maxiangqian.test01
(2) 호스트 1의 모든 데이터를 호스트 2 및 호스트 3
pt-table-sync --execute h=host1,D=db,t=tbl h=host2[root@localhost bin]# ./pt-table-sync --execute h=172.16.16.35,P=3306,D=maxiangqian,t=test,u=root,p=123456 h=172.16.16.34,P=3306,u=root,p=123456 --no-check-slave --print
에 동기화합니다.

(3) Slave1의 모든 데이터가 기본 데이터베이스와 동기화되었는지 확인하세요.

pt-table-sync --execute host1 host2 host3[root@localhost bin]# ./pt-table-sync --execute h=172.16.16.35,P=3306,D=maxiangqian,t=test,u=root,p=123456 h=172.16.16.34,P=3306,u=root,p=123456 h=172.16.16.35,P=3307,u=root,p=123456 --no-check-slave --print
이 요구 사항에서는 검사 중인 테이블에 기본 키 또는 고유 인덱스가 있어야 합니다. 다음과 같이 단일 데이터베이스의 단일 테이블을 지정할 수도 있습니다.
pt-table-sync --execute --sync-to-master slave1[root@localhost bin]# ./pt-table-sync --execute --sync-to-master h=172.16.16.34,P=3306,u=root,p=123456 --no-check-slave --print
(4) 검사

[root@localhost bin]# ./pt-table-sync --execute --sync-to-master h=172.16.16.34,P=3306,D=maxiangqian,t=test01,u=root,p=123456 --no-check-slave --print
에 의해 생성된 rep_test.checksums에 따라 모든 슬레이브 데이터베이스를 복원합니다. 이는 다음 예입니다. :

pt-table-sync --execute --replicate test.checksum master1
(5) 슬레이브1의 데이터만 복구

[root@localhost bin]# ./pt-table-sync --execute --replicate rep_test.checksums h=172.16.16.35,P=3306,u=root,p=123456
(6) 듀얼 마스터 모드 master2가 자체 데이터를 복구:

/pt-table-sync --execute --replicate rep_test.checksums --sync-to-master slave1
듀얼 마스터 모드로 인해 많은 문제가 있는 경우 수정 사항이 다른 데이터베이스에 전달될 수 있으므로 듀얼 마스터 모드에서 다음 작업을 수행하면 안 됩니다.

pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl

위 내용은 pt-table-checksum 검증 및 pt-table-sync 복구 데이터의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.