mysql的gtid主从复制,从库误操作更新操作,

一:查看mysql的从库,发现sql进程状态 “no”.提示执行传输过来的binlog日志,执行失败,

mysql的gtid主从复制,从库误操作更新操作,_第1张图片

mysql的gtid主从复制,从库误操作更新操作,_第2张图片

二:查看主库对应的二进制日志的gtid地方。插入一些数据。

# mysqlbinlog --base64-output=decode-rows -v mysql-bin.000001 |grep -A 100 "560d72ff-b057-11ee-84ba-5254005c1b84:8"
mysql的gtid主从复制,从库误操作更新操作,_第3张图片

三:从日志来看是写入错了,

1:第一种办法:跳过重复执行gtid事务 560d72ff-b057-11ee-84ba-5254005c1b84:8

从库执行操作

mysql> stop slave;

mysql> set @@session.gtid_next='560d72ff-b057-11ee-84ba-5254005c1b84:8';

mysql> start slave;

mysql> show slave status\G;

mysql的gtid主从复制,从库误操作更新操作,_第4张图片

mysql的gtid主从复制,从库误操作更新操作,_第5张图片

恢复正常了,

第二种办法。如果要保证这张表数据一致性,如果是删除或者更新操作,这表就会存在数据不一致问题,可以先备份这张表,从主库

从库删除操作

mysql> delete from userinfo where name='Jack08';

gtid的主从复制,是跟进gtid来判断是否数据一致,但是当前删除的数据是从库执行过的gtid事务,因为主节点不会判断出,主从数据是否不一致。因此这种现象就得恢复表。

1:从主库备份单表db1下的userinfo表。

# mysqldump -uadmin  -p"hechunyang" -S /tmp/mysql_db01.sock db1 userinfo -R -E --triggers --set-gtid-purged=OFF --source-data=2 --single-transaction --max-allowed-packet=512M >  /tmp/db1_userinfo.sql

2:拷贝到从库

mysql> stop slave;   #停止主从复制

mysql> set sql_log_bin=0;  #停止写入binlog开关,防止恢复表,出现写入binlog日志。

mysql> use db1
mysql> source db1_userinfo.sql;

mysql> set sql_log_bin=1;  

mysql> start slave;

mysql的gtid主从复制,从库误操作更新操作,_第6张图片

mysql的gtid主从复制,从库误操作更新操作,_第7张图片

3.查看主节点的gtid

总控,可以找到日志,看出是哪一张表被操作,如果是删除操作还是需要备份该表进行还原

你可能感兴趣的:(mysql,数据库)