Home >Database >Mysql Tutorial >MySQL主从不一致检查与修复

MySQL主从不一致检查与修复

WBOY
WBOYOriginal
2016-06-07 17:29:44878browse

pt-table-checksum在主上执行检查语句在线检查mysql复制的一致性,把表分块(hunk-size),生成replace语句,然后通过复制传递到从,

pt-table-checksum 安装:

下载地址:wget

tar  xf  percona-toolkit-{version}.tar.gz

cd percona-toolkit-{version}  # 进入解压后的目录

vim  README                    # 查看安装手册

必备条件:

安装 yum install  perl  mysql  perl-DBD-MySQL  -y

pt-table-checksum安装步骤:

perl

Makefile.PL

make

make install

一、在master上操作:

1.在Master库上授权:

GRANT update,insert,delete,SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO  checksum@'Master ip'  IDENTIFIED BY '123' ;

 


2、手工建在制定的库下(例如pts) checksums 表,保存pt-table-checksum 检测数据:

CREATE TABLE checksums (

  db            char(64)    NOT NULL,

  tbl            char(64)    NOT NULL,

  chunk          int          NOT NULL,

  chunk_time    float            NULL,

  chunk_index    varchar(200)    NULL,

  lower_boundary text            NULL,

  upper_boundary text            NULL,

  this_crc      char(40)    NOT NULL,

  this_cnt      int          NOT NULL,

  master_crc    char(40)        NULL,

  master_cnt    int              NULL,

  ts            timestamp    NOT NULL,

  PRIMARY KEY (db, tbl, chunk),

  INDEX ts_db_tbl (ts, db, tbl)

) ENGINE=InnoDB;

a.执行pt-table-checksum 检查主从数据表:

 /usr/bin/pt-table-checksum  h='1.1.1.2',u='checksum',p='123',P=3306 --databases test --tables t  --nocheck-replication-filters --create-replicate-table --replicate=pts.checksums  --no-check-binlog-format  --lock-wait-timeout=120

TS                ERRORS  DIFFS    ROWS  CHUNKS SKIPPED    TIME  TABLE

 06-08T10:41:16      0      0        2      1      0      0.338  test.t

上面显示的参数说明:

 TS            :完成检查的时间。

ERRORS        :检查时候发生错误和警告的数量。

DIFFS        :0表示一致,1表示不一致。当指定--no-replicate-check时,,会一直为0,当指定--replicate-check-only会显示不同的信息。

ROWS          :表的行数。

CHUNKS        :被划分到表中的块的数目。

SKIPPED      :由于错误或警告或过大,则跳过块的数目。

TIME          :执行的时间。

TABLE        :被检查的表名。

 


b.执行pt-table-sync 打印主从数据不一致的表:

/usr/bin/pt-table-sync --replicate=pts.checksums h=1.1.1.2,u=checksum,p=123 h=1.1.1.4,u=checksum,p=123 --print

 


c.恢复主从不一致的数据(在Master执行且以Master的结果为准)

/usr/bin/pt-table-sync --replicate=pts.checksums h=1.1.1.2,u=checksum,p=123 h=1.1.1.4,u=checksum,p=123 --execute

 

pt-table-checksum是一个在线验证主从数据一致性的工具,主要用于以下场景:

1. 数据迁移前后,进行数据一致性检查

2. 当主从复制出现问题,待修复完成后,对主从数据进行一致性检查

3. 把从库当成主库,进行数据更新,产生了”脏数据”

4. 定期校验

工作原理:

pt-table-checksum在主上执行检查语句在线检查mysql复制的一致性,把表分块(hunk-size),生成replace语句,然后通过复制传递到从,再通过update更新master_src的值。通过检测从上this_src和master_src的值从而判断复制是否一致。

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn