在网上查看解决办法 先stop slave,然后从新change master到报错位置。然后start slave
===============================================
stop slave ;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000521', MASTER_LOG_POS=869528465;
start slave;
show slave status;
===============================================
出现这种问题,判断是主从同步不一致问题。建议使用 percona-toolkit。
下面是实验步骤。
实验环境:
master:192.168.162.168
slave:192.168.162.167
- 操作
master:
MariaDB [test]> create table test (id int(10),name varchar(20),city varchar(30));
MariaDB [test]> insert into test (id,name,city) values (1,'aaa','aaa'),(2,'bbb','bbb'),(3,'ccc','ccc');
slave:
MariaDB [test]> select * from test;
+------+------+------+
| id | name | city |
+------+------+------+
| 1 | aaa | aaa |
| 2 | bbb | bbb |
| 3 | ccc | ccc |
+------+------+------+
MariaDB [test]> delete from test where id =1;
master:
update test set name='abb' where id=1;
slave: 报错如下图:
方法1:
MariaDB [test]> stop slave ;
MariaDB [test]> CHANGE MASTER TO MASTER_HOST='192.168.162.168',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000646',MASTER_LOG_POS=1801;
MariaDB [test]> start slave;
但是查询数据,表面主从一致,实际还是差数据。
master:
slave:
解决:使用强悍的瑞士×××percona-toolkit 工具 'pt-table-checksum','pt-table-sync'
注:这两个工具都是在Master上执行。
master:
pt-table-checksum --nocheck-replication-filters --databases=test --replicate=test.checksums --create-replicate-table --no-check-binlog-format --host=192.168.162.168 --port 3306 -uyang -p123456
--host=master_ip
--port mysql端口
--databases=test 问题数据库
--replicate= 在Master的test库上创建记录主从同步出现问题的表
--create-replicate-table
--no-check-binlog-format 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
--nocheck-replication-filters 不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
出现主从不同步后,直接使用工具 'pt-table-checksum':
提示主从同步停了,等待主从同步开启。
使用'pt-table-sync' 工具:
依然提示主从同步已关闭。
那我们开启,借鉴方法1开启主从同步。
slave:
嗯主从依然不一致。
现在使用pt工具解决。
Master:
目标出来了,发现主从同步不一致,并且记录到表中。
Master:
pt-table-sync --replicate=test.checksums --databases=test h=192.168.162.168,u=yang,p=123456 h=192.168.162.167,u=yang,p=123456 --print
pt-table-sync --replicate=test.checksums --databases=test h=192.168.162.168,u=yang,p=123456 h=192.168.162.167,u=yang,p=123456 --execute
问题解决!
该问题是经典的1032问题。从网上搜索多中方法,最后结合经验处理问题。过程痛苦,结果完美。