Mysql主从复制原理

本文深入解析MySQL主从复制的工作原理,涉及binlog、master-slave结构,以及如何配置主备服务器,包括server-id、bin_log路径、复制策略等。还介绍了常见状态与配置参数,如slave_net_timeout和双主热备操作。

Mysql

Mysql主从复制原理:

Mysql的主从复制中主要有三个线程:master(binlog dump thread)、slave(I/O thread 、SQL thread),Master一条线程和Slave中的两条线程。

master(binlog dump thread)主要负责Master库中有数据更新的时候,会按照binlog格式,将更新的事件类型写入到主库的binlog文件中。并且,Master会创建log dump线程通知Slave主库中存在数据更新。

I/O thread线程在Slave中创建,该线程用于请求Master,Master会返回binlog的名称以及当前数据更新的位置、binlog文件位置的副本。然后,将binlog保存在 「relay log(中继日志)」 中,中继日志也是记录数据更新的信息。

SQL线程也是在Slave中创建的,当Slave检测到中继日志有更新,就会将更新的内容同步到Slave数据库中,这样就保证了主从的数据的同步。

数据库的主从是基于binlog来进行的,binlog就是数据库语句的二进制文件,其中记录了数据库的所有执行更新的语句,也就是说可以通过binlog来还原数据库的操作。我们可以使用show master stauts来查看当前数据库的binlog的文件名和位置
在这里插入图片描述

其中的Position是当前文件内容的偏移量,造成偏移量的就是我们使用的更新语句,它会将更新语句一字不差的记录到binlog文件中,sql越长pos增加越大。

我们可以通过show slave status来查看slave的情况,其中关键内容如下:

               Slave_IO_State: Waiting for master to send event
                  Master_Host: peerServer
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 23868674
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
          Exec_Master_Log_Pos: 23868674

Slave_IO_State即当前slave的状态,目前常见的状态有:

1、Waiting for master to send event,正常状态,等待Master发送更新事件

2、connecting to master,当主机宕机恢复之后,slave完成重连并进行数据恢复过程中Master又宕机了,就会出现这个状态

3、Reconnecting after a failed master event read,当主机宕机时间超过X之后,默认1小时,我们配置成了5分钟,出现这个状态之后,slave会每Connect_Retry时间重连一次Master,重试86400次

mysql主备配置,配置文件内容如下:

[mysqld]
# server-id不能相同
server-id = 100

# bin_log的地址
log_bin = /var/lib/mysql/mysql-bin.log

# id自增幅度
auto-increment-increment = 2

# id初始值,一个为1一个为2,与auto-increment-increment一起就能保证id两台mysql插入的id不同
auto-increment-offset = 2

# 复制时忽略数据库及表,建议了解该字段含义之后进行配置,这里配置成完全忽略复制时的错误
slave-skip-errors = all

# 定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录,文件名为host_name-relay-bin.nnnnnn,如果服务器的主机名不是localhost的话不配置会有问题,建议配置
relay-log = localServer-relay-log
relay_log_index = localServer-relay-log.index

# 主备连接断开超时时间,超过该时间之后,slave进行重连,如果该值太大的话(默认1小时),那么当Master的dump log线程关闭之后到1小时这段期间内,就算slave连接回来也需要过1小时才能进行正常的同步
slave-net-timeout = 300

开启数据库主备功能命令如下:

STOP SLAVE;

change master to MASTER_HOST='peerServer', master_port=3306,master_user='rep',master_password='password',MASTER_LOG_FILE='mysql-bin.xxxxxx', MASTER_LOG_POS=x;

START SLAVE;

双主热备其实就是分别在两台mysql上分别执行主备就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值