我们在配置mysql主从的时候经常会遇到一些问题,同步延迟、定位binlog错误、查看binlog等等问题,一般大家可能会用到其他方式或者命令,我一般都是采用纯sql的方式进行排查,这里把我常用的一些方法分享给大家:
1.查询master和slave的状态
show master status;
show slave status;
2.通过show binary logs可以查看master上的binlog,当然前提是你要开启binlog
show binary logs;
3.然后找到你需要的binlog,一般就是最后一条数字最大的,然后使用以下sql就能查看具体的binlog的内容
show binlog EVENTS in 'prod-mysql1-bin.001700'
但是这个结果能定位一些问题,但是不能查看具体的sql,这个时候就要开启具体让mysql记录详细的sql,大家自行权衡binlog因此带来的空间增加,但是的确很方便
show variables like 'binlog_rows_query_log_events';
set global binlog_rows_query_log_events=1;
设置后再次查询,就会看到完整的sql了,是不是很方便
4.binlog由于很大很长,因此我们还会用到一些过滤条件,比如:
查询偏移
show binlog EVENTS in 'prod-mysql1-bin.001278' FROM 293791873 limit 200000
查询sql类型
show binlog EVENTS in 'prod-mysql1-bin.001278' AND EVENT_type = 'Delete_rows'
- 如果某个时刻我们要跳过一些Pos,或者要回退到某个Pos重新同步,这个时候就需要重置slave的偏移,步骤如下:
1.stop slave;
2.RESET slave;
3.change master to master_host='10.10.10.1',
master_user='backup-mysql1',
master_password='password',
master_log_file='prod-mysql1-bin.000632',
master_log_pos=1799348137;
如果master服务器、用户、密码没有变化,可以简化为
change master to
master_log_file='prod-mysql1-bin.000628',
master_log_pos=296120546;
最后,当前别忘了启动slave
start slave;
这样,就能更改slave数据库的同步偏移.
6.其他一些sql
-- 查看具体的同步错误
select * from performance_schema.replication_applier_status_by_worker;
-- 过滤掉不需要同步
change replication filter replicate_ignore_table=(db1.order);