percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括:
1)、检查master和slave数据的一致性
2)、有效地对记录进行归档
3)、查找重复的索引
4)、对服务器信息进行汇总
5)、分析来自日志和tcpdump的查询
6)、当系统出问题的时候收集重要的系统信息
percona-toolkit源自Maatkit 和Aspersa工具,这两个工具是管理mysql的最有名的工具,现在Maatkit工具已经不维护了,请大家还是使用percona-toolkit吧!这些工具主要包括开发、性能、配置、监控、复制、系统、实用六大类,如果能掌握并加以灵活应用,将能极大的提高工作效率。
安装环境如下:centos 5.5 64位,已经编译安装了mysql5.5.18。
主IP为10.1.1.191,从为10.1.1.192
安装过程:
复制代码 代码如下:
yum -y install perl-DBI perl-DBI-MySQL
wget http://www.percona.com/redir/downloads/percona-toolkit/2.1.7/percona-toolkit-2.1.7.tar.gz
tar zxf percona-toolkit-2.1.7.tar.gz
perl Makefile.PL
make
make install
主从数据一致性检测工具:
pt-table-checksum
pt-table-checksum是一个在线验证主从数据一致性的工具,主要用于以下场景:
1. 数据迁移前后,进行数据一致性检查
2. 当主从复制出现问题,待修复完成后,对主从数据进行一致性检查
3. 把从库当成主库,进行数据更新,产生了"脏数据"
4. 定期校验
用法介绍:
pt-table-checksum [OPTION...] [DSN]
参数解释
DSN h='192.168.250.249',u='checksums',p='xxxx',P=3306
-d
指定校验的库,多个库用逗号(,)分隔
--nocheck-replication-filters
忽略replication-do-db规则
--replicate=test.checksums
在test库下创建checksums表,并将数据写入
--recursion-method=none
指定复制检查的方式,默认情况下使用SHOW PROCESSLIST,如果非标准的3306端口,就使用SHOW SLAVE HOSTS的方式,推荐使用dsn方式,手动指定
为了测试效果,将主从表的数据改的不一致:
主上:
select * from a;
+------+
| b |
+------+
| 3 |
+------+
从上:
select * from a;
+------+
| b |
+------+
| 2 |
+------+
然后使用pt-table-checksum测试效果:
pt-table-checksum --nocheck-replication-filters --databases=wang --replicate=test.checksums --host=10.1.1.191 --port 3306 -utest -p123456 --no-check-binlog-format
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
11-22T18:09:43 0 1 1 1 0 0.264 wang.a
11-22T18:09:43 0 0 1 1 0 0.012 wang.b
从结果可以看出diffs值为1。说明wang库的a表数据不一致。
暂时先到这里,下次再测试使主从数据一致的工具:
pt-table-sync
拖了好多天了,今天补上:
用法介绍:
pt-table-sync [OPTION...] DSN [DSN...]
参数解释
DSN h='192.168.250.249',u='checksums',p='xxxx',P=3306
原理:总是在主上执行数据的更改,再同步到从上,不会直接更改成从的数据,在主上执行更改是基于主上现在的数据,不会更改主上的数据。注意使用之前先备份你的数据,避免造成数据的丢失.执行execute之前最好先换成--print或--dry-run查看一下会变更哪些数据。
首先修改主从数据,使他们不一致:
主:
root@wang 10:25>select * from a;
+-----+------+
| id | b |
+-----+------+
| 2 | 3 |
| 4 | 4 |
| 200 | 100 |
+-----+------+
从:
root@wang 10:29>select * from a;
+-----+------+
| id | b |
+-----+------+
| 2 | 3 |
| 4 | 4 |
| 200 | 2000 |
+-----+------+
然后执行pt-table-sync --print查看一下变更。
pt-table-sync --print -utest -p123456 --sync-to-master h=10.1.1.192,D=wang,t=a
REPLACE INTO `wang`.`a`(`id`, `b`) VALUES ('200', '100') /*percona-toolkit src_db:wang src_tbl:a src_dsn:D=wang,P=3306,h=10.1.1.191,p=...,t=a,u=test dst_db:wang dst_tbl:a dst_dsn:D=wang,h=10.1.1.192,p=...,t=a,u=test lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:3481 user:root host:nginx1*/;
然后执行同步修复
pt-table-sync --execute -utest -p123456 --sync-to-master h=10.1.1.192,D=wang,t=a
然后查看主从数据:
主:
root@wang 10:39>select * from a;
+-----+------+
| id | b |
+-----+------+
| 2 | 3 |
| 4 | 4 |
| 200 | 100 |
+-----+------+
从:
root@wang 10:40>select * from a;
+-----+------+
| id | b |
+-----+------+
| 2 | 3 |
| 4 | 4 |
| 200 | 100 |
+-----+------+
备注:如果表没有唯一索引或者主键就无法使用了。>>> 更多内容,请访问:mysql主从复制、mysql主从同步系列教程