主从复制乐成以后,看到主库中有一个数据库从库中没有,就想着删掉保护同等,结果一删除就出问题了,主库中再进行增编削查利用的时候,从库不会跟着复制利用了。最后在从库的假造机里面 show slave status\G; 的时候发现报错了…其实过细想想照旧很合乎逻辑的,从库是依靠在主库处拉去的binlog的做恢复,主库drop database test,从库同样会实行该语句,那从库发现它根本就没有这个库,此时从库认为与主库已经不同等了,主从中断。
Error 'Can't drop database 'test'; database doesn't exist' on query. Default database: 'test'. Query: '/* ApplicationName=IntelliJ IDEA 2024.1.3 */ drop schema test'
复制代码
怎么解决呢?从库跳过这条不实行呗。
让指针往下移动
stop slave;
set global sql_slave_skip_counter=1;
start slave;
复制代码
问题来了, set global sql_slave_skip_counter=N,这条语句的N到底指什么呢?
从库从主库上复制binlog二进制文件内容到当地实行。在binlog上下令以event的形式存在,并非一个下令对应一个event。
以一个insert语句为例(引擎InnoDB、binglog_format=statement), 在binlog中现实上有三个event,分别为begin\insert\commit 。 下令类型都是Query_log_event。而set global sql_slave_skip_counter=N的意思,即为在start slave时,从当前位置起,跳过N个event。
分析:当N=1时,会连续跳过若干个event,直到当前所在的事件竣事。
连续跳过若干个event,直到当前所在的事件竣事。