Mysql 主从同步学习_总结_分析


【注】:此篇内容为作者整理,和官方文档可能有些差异。


(声明:本教程仅供本人学习使用,如有人使用该技术触犯法律与本人无关)
(如果有错误,还希望指出。共同进步)


Mysql 主从同步原理

留坑,后期补全


Mysql 主从同步配置

留坑,后期不全


Mysql 主从同步字段详解


主从同步命令

【注】开启和关闭都在主数据库中执行
# 开启主从同步
mysql> start slave;

# 停止主从同步
mysql> stop slave;

# 查看主从配置参数, 从库和主库参数配置不同
mysql> show slave status\G;		加“\G“是以换行的形式查看,更人性化可读

主从同步参数【从库读取】

[1]                Slave_IO_State: # slave(从库)连接到Master(主库)状态
[2]                   Master_Host: # Mysql主库的IP地址
[3]                   Master_User: # Mysql主库负责主从复制的用户,创建主从复制的时候建立(需配置reolication slave权限)
[4]                   Master_Port: # Mysql主库服务器的端口,一般是3306 
[5]                 Connect_Retry: # 连接中断后,重新尝试连接的时间间隔(默认是60s)
[6]               Master_Log_File: # 当前I/O线程正在读取的主库服务器二进制日志文件的名称
[7]           Read_Master_Log_Pos: # 当前I/O线程正在读取的二进制日志的位置(偏移量,单位是字节),说明已经同步二进制日志存储容量的多少
[8]                Relay_Log_File: # (中继日志)显示Slave的SQL线程当前正在读取和执行的中继日志文件的名称
[9]                 Relay_Log_Pos: # 当前Slave SQL线程正在读取“中继日志”的位置(同步到中继日子存储容量的多少)
[10]        Relay_Master_Log_File: # SQL线程从中继日志中读取到的SQL语句,相对应的主库的SQL语句记录在主库的哪个(binlog)二进制日志中【Relay_Log_File下的Relay_Log_Pos与Relay_Master_Log_File的Exec_Master_Log_Pos一一对应】
[11]             Slave_IO_Running: # 显示I/O线程是否是否被启动并成功的连接到主服务器上,成功/失败:Yes/No
[12]            Slave_SQL_Running: # 显示SQL线程是否成功启动, 成功/失败:Yes/No
[13]              Replicate_Do_DB: # 指定需要同步的数据库
[14]          Replicate_Ignore_DB: # 指定不需要同步的数据库
[15]           Replicate_Do_Table: # 指定需要同步的表
[16]       Replicate_Ignore_Table: # 指定不需要同步的表
[17]      Replicate_Wild_Do_Table: # 指定需要同步的原生数据表(多用于解决跨库更新,sql被忽略的情况)
[18]  Replicate_Wild_Ignore_Table: # 指定不需要同步的原生数据表(多用于解决跨库更新,sql被忽略的情况)
[19]                   Last_Errno: # 表示从库(Slave)SQL线程读取日志参数最后一次的错误数量
[20]                   Last_Error: # 表示从库(Slave)SQL线程读取日志参数最后一次的错误信息
                   			   【错误数量为0并且消息为空字符串表示没有错误;如果错误消息不是空值,也会在从库的错误日志中作为消息使用】
[21]                 Skip_Counter: # 显示最近被使用的SQL_SLAVE_SKIP_COUNT的值,用于跳过Slave错误的,SQL_SLAVE_SKIP_COUNT是以event为单位skip(跳过),直到skip完第N个event所在的event group才停止,对于事务表,一个event group对应一个事务;对于非事务表,一个event group对应一条SQL语句,一个event group中包含多个events.
[22]          Exec_Master_Log_Pos: # 表示SQL线程执行的中继日志相对于主库二进制日志偏移量的位置,Read_Master_Log_Pos - Exec_Master_Log_Pos = 当前SQL线程运行的延时(单位:字节)。注意:Relay_Master_Log_File的值是否和Master_Log_File值相等,如果小于Master_Log_File,说明延迟更大。
[23]              Relay_Log_Space: # 表示原有的中继日志结合起来的总大小
[24]              Until_Condition: # 在start slave语句中指定UNTIL子句,如果没有指定,值为None
              				   # 如果从库正在读取,直到主库的二进制日志的给定位置为止,只为Master
              				   # 如果从库正在读取,直到达到中继日志的给定位置为止,值为Relay
[25]               Until_Log_File: # 读取的指定日志的路径
[26]                Until_Log_Pos: # 读取的指定日志的读取位置(偏移量)*-------------------------------------------------------------------*】如果Slave使用SSL连接的Master,以下就会显示对应的证书和私钥信息 
[27]           Master_SSL_Allowed: # 允许对主库进行SSL连接,值为Yes
           					   # 不允许对主库进行SSL连接,值为No
           					   # 允许SSL连接,但是从库没有让SSL支持被启用,值为Ignored
[28]           Master_SSL_CA_File: # CA证书路径
[29]           Master_SSL_CA_Path: 
[30]              Master_SSL_Cert: # master证书的路径
[31]            Master_SSL_Cipher:
[32]               Master_SSL_Key: # master密钥的路径
            【*----------------------------------------------------------------
[33]        Seconds_Behind_Master: # 从库(slave)当前的时间戳和主库(master)记录该事件的时间戳的差值
[34]Master_SSL_Verify_Server_Cert: # 
[35]                Last_IO_Errno: # 最后一次I/O线程的错误号
[36]                Last_IO_Error: # 最后一次I/O线程的错误信息
[37]               Last_SQL_Errno: # 最后一次SQL线程的错误号
[38]               Last_SQL_Error: # 最后一次SQL线程的错误信息
[39]  Replicate_Ignore_Server_Ids: # 主从复制,从库忽略的主库服务器ID号,就是不以这些服务器ID为主库
[40]             Master_Server_Id: # 主库服务器ID
[41]                  Master_UUID: # 主库服务器的UUID[42]             Master_Info_File: # 从库中保存主库服务器相关信息文件的路径
[43]                    SQL_Delay: # 一个非负整数,表示秒数,Slave滞后多少秒于Master
[44]          SQL_Remaining_Delay: # 当Slave_SQL_Running_State等待,直到MASTER_DELAY秒后,Master执行的事件,此字段包含一个整数,表示有多少秒左右的延迟。在其他时候,这个字段是NULL
[45]      Slave_SQL_Running_State: # SQL线程运行状态
[46]           Master_Retry_Count: # 连接主库失败最多的重试次数
[47]                  Master_Bind: # Slave从库在多网络接口的情况下使用,指定用哪一个Slave网络端口连接到Master
[48]      Last_IO_Error_Timestamp: # 最后一次I/O线程错误的时间戳
[49]     Last_SQL_Error_Timestamp: # 最后一次SQL线程错误的时间戳
[50]               Master_SSL_Crl: # 
[51]           Master_SSL_Crlpath:
[52]           Retrieved_Gtid_Set: # 获取到的GTID<I/O线程> | 接收的二进制日志集合,对应IO线程
[53]            Executed_Gtid_Set: # 执行过的GTID<SQL线程> | 执行的二进制日志集合,对应SQL下称
[54]                Auto_Position: # 记录在GTID模式下是否开启了自动事务校验
[55]         Replicate_Rewrite_DB:
[56]                 Channel_Name: # 多源复制下(5.7支持),复制通道的名称,可以有多个
[57]           Master_TLS_Version:

Slave_IO_State


1) waiting for master update

 	这是connecting to master状态之前的状态

2) connecting to master

	I/O线程正尝试连接到master

3) checking master version

	在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。

4) registering slave on master

	在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。  

5) requesting binlog dump

	在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。在这个状态下,I/O线程向master发送请求,请求binlog,位置从指定的binglog 名字和binglog的position位置开始。

6) waiting to reconnect after a failed binlog dump request

	如果因为连接断开,导致binglog的请求失败,I/O线程会进入睡眠状态。然后定期尝试重连。尝试重连的时间间隔,可以使用命令"change master to master_connect_trt=X;"改变。

7) reconnecting after a failed binglog dump request

	I/O进程正在尝试连接master

8) waiting for master to send event

	说明,已经成功连接到master,正等待二进制日志时间的到达。如果master 空闲,这个状态会持续很长时间。如果等待的时间超过了slave_net_timeout(单位是秒)的值,会出现连接超时。在这种状态下,I/O线程会人为连接失败,并开始尝试重连

9) queueing master event to the relay log

	此时,I/O线程已经读取了一个event,并复制到了relay log 中。这样SQL 线程可以执行此event

10) waiting to reconnect after a failed master event read

	读取时出现的错误(因为连接断开)。在尝试重连之前,I/O线程进入sleep状态,sleep的时间是master_connect_try的值(默认是60秒)

11) reconnecting after a failed master event read

	I/O线程正尝试重连master。如果连接建立,状态会变成"waiting for master to send event"

12) waiting for the slave sql thread to free enough relay log space

	这是因为设置了relay_log_space_limit,并且relay log的大小已经整张到了最大值。I/O线程正在等待SQL线程通过删除一些relay log,来释放relay log的空间。

13) waiting for slave mutex on exit

	I/O线程停止时会出现的状态,出现的时间非常短。

Slave_SQL_Running_State

1) Reading event from the relay log

	线程已经从中继日志读取一个事件,可以对事件进行处理了。

2) Has read all relay log; waiting for the slave I/O thread to update it

	线程已经处理了中继日志文件中的所有事件,现在正等待I/O线程将新事件写入中继日志。

3) Waiting for slave mutex on exit

	线程停止时发生的一个很简单的状态。

猜你喜欢

转载自blog.csdn.net/weixin_43633797/article/details/107688846