一.复制过程中的线程问题
控制复制有三个线程。在master上,每个已经连接的slave都有一个binlog Dump线程(转储线程),该线程负责把binlog事件传送给已经连接的slave。slave上有两个线程,slave-I/O线程和slave-SQL线程,slave-I/O线程负责读取master传递过来的binlog事件,然后将这些事件写入slave的中继日志(relay-log)。 slave-SQL线程负责读取中继日志的事件然后执行。
master端:
使用show processlist 可以查看binlog Dump线程的当前状态
State:描述了master对二进制日志和slave做了那些操作
User:显示运行该语句的用户(之前授权的用于复制的用户)
Command:该线程运行的命令的类型
Info:线程正在执行的语句信息,当前复制状态处于等待状态字段为NULL。
slave端:
同样也可以使用show processlist查看线程的状态
正常状态:等待来自master的信息(I/O线程),已经全部执行中继日志中的事件(SQL线程)
在排除故障时,使用show processlist可以很方便的查看复制的状态‘
二.监控master
1.show master status
File:列出当前binlog文件的名称
Position:写出二进制日志当前的位置(也就是下一次日志写入的位置)
Binlog_Do_DB:指定的数据库(对于数据库的过滤有用)
Binlog_Ignore_DB:忽略的数据库
Executed_Gtid_Set:基于Gtid的复制
2.show master logs(show binary logs 列出master上可用的二进制文件及其大小)
该命令有利于比较master和slave的信息,也就是slave目前正在读取master上哪个二进制日志。
三.监控slave
1.show slave status:显示slave的二进制日志,slave到master的连接和复制活动,包括当前binlog文件的文件名以及偏移位置。
slave的复制信息大概分为:master连接的信息、slave性能、日志信息、过滤、日志性能和出错条件
master连接的信息:master的主机名、连接的用户、连接的端口
日志信息:master二进制日志和slave中继日志的信息,包括文件名和位置信息
Relay_Log_Space:所有中继日志文件的大小
Seconds_Behind_Master:事件执行和事件写入master二进制日志之间的事件间隔。
master的读取位置:IO线程即将从master二进制日志读取下一个事件的位置
Master_Log_File
Read_Master_Log_Pos
中继日志的执行位置:SQL线程即将执行的slave中继日志中下一个事件的位置
Relay_Log_Pos
Relay_Log_File
master的执行位置:SQL线程即将执行master binlog中下一个事件的位置
Relay_Master_Log_File
Exec_Master_Log_Pos
通过比较master的读取位置和master的执行位置,可以确定是否事件等待执行,一旦位置相同,表明中继日志中没有等待的事件,此时可以安全的停止slave并重定向到新的master