Rootop 服务器运维与web架构

利用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客户端工具往主数据库插入数据。

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

在从库上查看校验信息:

[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

解释:
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)删除。

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

看到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


解释:
–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查看两台机器数据同步完成了。

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/3300.html

作者:Venus

服务器运维与性能优化

评论已关闭。