[root@localhost ~]# perl -v
安装DBI 下载地址:
安装DBD-mysql 下载地址:http://search.cpan.org/dist/DBD-mysql/
[root@localhost ~]# wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.019.tar.gz [root@localhost ~]# tar zxvf DBD-mysql-4.019.tar.gz [root@localhost ~]# cd DBD-mysql-4.019
[root@localhost DBD-mysql-4.019]# perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config
[root@localhost DBD-mysql-4.019]# make
[root@localhost DBD-mysql-4.019]# make test
[root@localhost DBD-mysql-4.019]# make
[root@localhost DBD-mysql-4.019]# make install
安装maatkit 下载地址: http://www.maatkit.org/
wget http://maatkit.googlecode.com/files/maatkit-7540.tar.gz
tar zxvf maatkit-7540.tar.gz
cd maatkit-7540
perl Makefile.PL
make install
[root@localhost ~]# mk-
我们在从库上运行
[root@vm01 ~]# mk-table-sync --execute --print --no-check-slave --databases test h=192.168.8.23,u=admin,p=123456 h=192.168.8.22,u=admin,p=123456
DELETE FROM `test`.`heartbeat` WHERE `server_id`='11' LIMIT 1 /*maatkit src_db:test src_tbl:heartbeat src_dsn:h=192.168.8.23,p=...,u=admin dst_db:test dst_tbl:heartbeat dst_dsn:h=192.168.8.22,p=...,u=admin lock:0 transaction:0 changing_src:0 replicate:0 bidirectional:0 pid:4176 user:root host:vm01*/;
DELETE FROM `test`.`t1` WHERE `id`='22' LIMIT 1 /*maatkit src_db:test src_tbl:t1 src_dsn:h=192.168.8.23,p=...,u=admin dst_db:test dst_tbl:t1 dst_dsn:h=192.168.8.22,p=...,u=admin lock:0 transaction:1 changing_src:0 replicate:0 bidirectional:0 pid:4176 user:root host:vm01*/;
INSERT INTO `test`.`t1`(`id`) VALUES ('2') /*maatkit src_db:test src_tbl:t1 src_dsn:h=192.168.8.23,p=...,u=admin dst_db:test dst_tbl:t1 dst_dsn:h=192.168.8.22,p=...,u=admin lock:0 transaction:1 changing_src:0 replicate:0 bidirectional:0 pid:4176 user:root host:vm01*/;
[root@vm01 ~]#
这里要说明一下,主从数据库表和表结构必须一致,否则会报错,,,--no-check-slave这个参数,如果你不加这个参数,会提示报错,因为这个工具默认是不允许在从库上修改数据的,但我们这里为了不在主库上dump出来,再到从库上导入进去,加了这个参数。
它的工作原理是:先一行一行检查主从库的表是否一样,如果哪里不一样,就执行删除,更新,插入等操作,使其达到一致。
这时,我们在检查下主从表的完整性、一致性
在主库上运行
[root@vm02 ~]# mk-table-checksum h=localhost,u=root,p=123456 h=192.168.8.22,u=admin,p=123456 -d test
DATABASE TABLE CHUNK HOST ENGINE COUNT CHECKSUM TIME WAIT STAT LAG
test heartbeat 0 localhost MyISAM NULL 3258230607 0 0 NULL NULL
test heartbeat 0 192.168.8.22 MyISAM NULL 3258230607 0 0 NULL NULL
test t1 0 localhost InnoDB NULL 1245381782 0 0 NULL NULL
test t1 0 192.168.8.22 InnoDB NULL 1245381782 0 0 NULL NULL
test t2 0 localhost InnoDB NULL 251493421 0 0 NULL NULL
test t2 0 192.168.8.22 InnoDB NULL 251493421 0 0 NULL NULL
[root@vm02 ~]#
[root@vm02 ~]# mk-table-checksum h=localhost,u=root,p=123456 h=192.168.8.22,u=admin,p=123456 -d test | mk-checksum-filter
[root@vm02 ~]#
可以看到,主从库的表数据已经完全一样了。