percona mysql test_利用percona-toolkit实现mysql一致性检查及同步

在mysql主从复制中,mysql5.1版本出现错误的次数比较高,如主库宕机或者从库宕机,日志损坏都会导致复制异常,通常需要手动修复或者重新同步。

如果数据不一致,会直接导致经济损失(电商),所以就利用pt-table-checksum工具来检查主从的一致性,以及通过pt-table-sync来同步未同步的数据。

服务器信息:

master:192.168.0.171

slave   :192.168.0.178

数据库版本:mysql-5.1

数据库名称:test (安装完成后自带)

安装配置主从:

Master:

[root@localhost ~]# yum install -y mysql mysql-server perl perl-devel perl-Time-HiRes

[root@localhost ~]# service mysqld start

[root@localhost ~]# mysql

mysql> use mysql;

mysql> update user set password=password('root') where user = 'root';

mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

mysql> flush privileges;

Slava:

[root@localhost ~]# yum install -y mysql mysql-server perl perl-devel perl-Time-HiRes

[root@localhost ~]# service mysqld start

[root@localhost ~]# mysql

mysql> use mysql;

mysql> update user set password=password('root') where user = 'root';

mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

mysql> flush privileges;

master:

编辑/etc/my.cnf添加或修改:

log-bin=mysql-bin

server-id=1

binlog-do-db=test

binlog-ignore-db=mysql

binlog_format=ROW

重启mysql服务。

show一下master信息:

[root@localhost ~]# mysql -uroot -proot

mysql> show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 | 106 | test | mysql |

+------------------+----------+--------------+------------------+

slave:

编辑/etc/my.cnf添加或修改:

master-port=3306

master-connect-retry=60

replicate-do-db=test

replicate-ignore-db=mysql

server-id=2

重启mysql服务。

配置从库同步:

[root@localhost ~]# mysql -uroot -proot

mysql> stop slave;

mysql> reset slave;

mysql> change master to master_host='192.168.0.171', master_user='root', master_password='root', master_log_file='mysql-bin.000001', master_log_pos=106;

mysql> start slave;

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.0.171

Master_User: root

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 106

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

必须看到两个Yes为配置成功。

在主库上创建表:

create table teacher(

id int(3) auto_increment not null primary key,

name char(10) not null,

address varchar(50) default 'qingdao',

year date

);

这里我用SQLyogEnt客户端工具往主数据库插入数据。

查看从库表结构及第一条数据已经同步过去。

1.jpg

在从库上查看校验信息:

[root@localhost ~]# pt-table-checksum --user=root --password=root --host=192.168.0.171 --P=3306 --d=test --recursion-method=processlist --no-check-binlog-format --nocheck-replication-filters --replicate=test.checksums --set-vars innodb_lock_wait_timeout=50

2.jpg

解释:

TS             :完成检查的时间。

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

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

ROWS      :表的行数。

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

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

TIME        :执行的时间。

TABLE     :被检查的表名。

pt-table-checksum参数解释:

--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。

--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。

--replicate-check-only :只显示不同步的信息。

--replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。

更多参数可以 pt-table-checksum --help查看

继续往主库插入2条数据,查看从库是否同步。如果同步完成,把从库的最后两条数据(id=2 id=3)删除。

3.jpg

在从库上再查看校验信息:

4.jpg

看到DIFFS为1,说明数据不一致。需要同步。

pt-table-sync可以做单向和双向同步的表数据。可以同步单个表,也可以同步整个库。但它不同步表结构、索引、或任何其他模式对象。所以在修复一致性之前需要保证他们表存在。

[root@localhost ~]# pt-table-sync --execute --replicate test.checksums --sync-to-master h=192.168.0.178,P=3306,u=root,p=root --print

5.jpg

解释:

–replicate=   :指定通过pt-table-checksum得到的表

–databases= :指定执行同步的数据库,多个用逗号隔开

–tables=        :指定执行同步的表,多个用逗号隔开

–sync-to-master :通过show processlist或show slave status 去自动的找主

h=192.168.0.178 :Slave的地址

u=root     :用户名

p=root     :密码

–print     :打印信息,但不执行命令

–execute :执行命令

再通过SQLyogEnt查看两台机器数据同步完成了。

专注于 服务器运维与web架构

E-mail:venus#rootop.org

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值