Maison  >  Article  >  base de données  >  Vérification de la somme de contrôle pt-table et données de réparation pt-table-sync

Vérification de la somme de contrôle pt-table et données de réparation pt-table-sync

巴扎黑
巴扎黑original
2017-06-23 15:06:091415parcourir
1 : Télécharger la boîte à outils
Connectez-vous au site Web pour télécharger la boîte à outils correspondante
2 : Installer
(1) yum installation :
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

L'ensemble de résultats montre ce qui suit pour prouver que l'installation est réussie :

percona-toolkit.noarch 3.0.0-rc percona-release-noarch

Puis installez

sudo yum install percona-toolkit

(2) Décompressez le package d'installation :

[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

Jusqu'à présent, la boîte à outils toolKit de percona a été installée. Ce qui suit teste principalement la vérification pt-table-checksum et pt-table-sync. principalement utilisé pour la vérification et la vérification des données. Du point de vue de la cohérence, ce dernier est principalement utilisé pour réparer les données. Généralement, les deux peuvent être combinés pour réparer les incohérences des données.

pt-table-checksum est un outil fourni par percona pour vérifier la cohérence des données maître-esclave. Nous pointons vers la bibliothèque maître, jugeons l'ensemble de résultats de la bibliothèque esclave et nous le transmettons. . Lorsque des incohérences sont capturées. Lorsque cela est demandé, un résultat non nul sera renvoyé. Cependant, il ne peut trouver que des incohérences dans les données. Si vous souhaitez réparer des problèmes de données, vous devez utiliser pt-table-sync.
pt-table-checksum est basé sur le format de copie de l'instruction lors de l'exécution. Si nous utilisons le format ROW, nous devons ajouter le paramètre --no-check-binlog-format lors de l'exécution.
3 : La pratique de pt-table-checksum, on peut l'utiliser directement après l'installation
[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
<.>
Nous pouvons également vérifier une certaine bibliothèque séparément pour affiner la portée de la vérification :

[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
Les résultats obtenus sont comme ci-dessus, regardez à la description :

TS : Il est temps de finaliser le contrôle. ERREURS : nombre d'erreurs et d'avertissements survenus lors de la vérification. DIFFS : 0 signifie cohérent, 1 signifie incohérent. Lorsque --no-replicate-check est spécifié, il sera toujours 0. Lorsque --replicate-check-only est spécifié, différentes informations seront affichées. LIGNES : le nombre de lignes dans le tableau. CHUNKS : le nombre de blocs divisés dans le tableau. SKIPPED : nombre de blocs à ignorer en raison d'erreurs ou d'avertissements ou parce qu'ils sont trop volumineux. TIME : temps d’exécution. TABLE : Le nom de la table en cours de vérification.
Jetez ensuite un oeil à ce paramètre principal :
--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 :端口
En spécifiant le paramètre --replicate=rep_test.checksums, une base de données sera automatiquement Les informations de contrôle sont écrites dans la table des sommes de contrôle.

Entrez dans la bibliothèque correspondante de SLAVE pour afficher les informations du tableau des sommes de contrôle. Vous pouvez afficher des informations incohérentes via la déclaration suivante :
mysql> select * from checksums where this_cnt<>master_cnt;
<.>Grâce à ce qui précède, This_crc <> master_crc peut voir plus clairement leurs incohérences. Grâce à un morceau, nous pouvons savoir quel bloc de cette table a des enregistrements incohérents.

4 : Détecter les incohérences des données et utiliser pt-table-sync pour les corriger
Jetons un coup d'œil à la section précédente. Nous avons détecté qu'il y en a. incohérences à travers la déclaration suivante Les données sont incohérentes :
[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
Restaurer les données incohérentes :

[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
elle-même est moins tester cette table Après avoir exécuté une ligne de données, les données du corps principal et de la copie seront cohérentes :

Ensuite, jetons un coup d'œil à quelques cas d'utilisation de pt-table-sync :
(1 ) Synchronisez les données sur host1 avec host2, et synchronisez uniquement la table db.tbl
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
(2) Synchronisez toutes les données sur host1 vers host2 et host3

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
(3) Assurez-vous que toutes les données sur slave1 sont synchronisées avec la base de données principale

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
Cela nécessite que la table vérifiée ait une clé primaire ou un index unique. Nous pouvons également spécifier la table unique d'une seule base de données comme suit

[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
(4) Restaurer toutes les bases de données esclaves selon les rep_test.checksums générés par le check

pt-table-sync --execute --replicate test.checksum master1
est l'exemple suivant :

[root@localhost bin]# ./pt-table-sync --execute --replicate rep_test.checksums h=172.16.16.35,P=3306,u=root,p=123456
(5 ) Réparez uniquement les données de l'esclave1

/pt-table-sync --execute --replicate rep_test.checksums --sync-to-master slave1
(6) Le mode double maître master2 répare ses propres données :

pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
En raison des nombreux problèmes en mode dual-master, une modification peut être transmise à une autre base de données, il ne faut donc pas effectuer les opérations suivantes en mode dual-master :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn