小技巧:判断主从复制是否延时

我们先在主库查看当前的Position号,如下是1070,使用的binlog文件是 mysql-bin.000041

[root@client1 binlog]# mysql -e 'show master status;'
mysql-bin.000041   1070 

#查看是否已发送所有日志
mysql> show processlist;
#以下信息为已发送所有日志
Master has sent all binlog to slave; waiting for more updates starting 

然后在从库查看状态

mysql> show slave status \G;
Read_Master_Log_Pos: 1070 #已经获取到主库的binlog日志位置信息
Exec_Master_Log_Pos: 1070 #已执行到的日志位置点

确保两者是一致,代表同步已完成。

我们继续在从库上查看master.info文件

$ cd /usr/local/mysql/data/
$ cat master.info 
25
mysql-bin.000041 #接收的binlog日志文件名
1070  #对应主库的Position号,如果一致则代表同步完成
10.154.0.111
repl
123
3306
10
0

在从库上查看relay-log.info文件

$ cd /usr/local/mysql/data/
$ cat relay-log.info 
7  #server_id号
./client2-relay-bin.000006
360  #相当于当前回放relay日志到了360号,360号对应以下的1070号,也就是说已经回放完了binlog的1070号
mysql-bin.000041
1070 #对应已经获取到的binlog日志Position号
0
0
1

注意:上述操作要同一时刻进行查看,如果两者不同,相减就可出了延迟的日志量。

下面我们来看一下Position还代表什么意义,通过上述我们得知,Position是1070,查看主库的binlog文件大小发现为1070,故Position代表的含义为日志的大小,单位为字节。

$ cd /data/binlog/
$ ll
-rw-r-----. 1 mysql mysql    1070 Apr  5 08:36 mysql-bin.000041

主从延时的监控回顾

查看主从延时时间

show slave  status\G
Seconds_Behind_Master: 0

查看主库到哪个位置号了

mysql> show master status ;
File: mysql-bin.000041
Position: 1070

查看从库拿到的日志位置点

mysql> show slave status \G;
Master_Log_File: mysql-bin.000041
Read_Master_Log_Pos: 1070 #从主库拿到的日志位置点
Exec_Master_Log_Pos: 1070 #已执行到的日志位置点

两者一致说明主库没有延时

查看从库执行了多少日志

#拿过来的是binlog,执行的是relay_log,号码是对不上的,执行位置点360相当于执行到了1070
Relay_Log_File: client2-relay-bin.000007
Relay_Log_Pos: 360
Exec_Master_Log_Pos: 1070

企业中构建主从的方式,适用于读多写少的业务


学习来自:B站课程:MySQL主从复制延时 P132

posted @ 2021-04-10 15:22  努力吧阿团  阅读(278)  评论(0编辑  收藏  举报