MySQL主从一致原理

MySQL主从同步过程

  一般MySQL的备库会设置成read-only,以避免发生数据不一致等情况,注意这个read-only对于超级用户无效(binlog可以正常执行),事务日志同步的过程如下:

  1. 在备库B上通过change master命令,设置主库A的IP、端口、用户名、密码,以及要从哪个位置开始请求binlog,这个位置包含文件名和日志偏移量。
  2. 在备库B上执行start slave命令,这时候备库会启动两个线程,分别为io_thread和sql_thread。其中io_thread负责与主库建立连接。
  3. 主库A校验完用户名、密码后,开始按照备库B传过来的位置,从本地读取binlog,发给B。
  4. 备库B拿到binlog后,写到本地文件,称为中转日志(relay log)。
  5. sql_thread读取中转日志,解析出日志里的命令,并执行。

binlog日志格式

  一共有三种格式
  Statement:
  这种格式直接记录操作语句,如果使用limit时,可能会发生在主库和从库上选择不同索引而造成的查询结果不一致的问题
  Row:
  记录具体操作的rowID,不会出现主从不一致的问题。对于插入会记录具体插入内容和插入的行,对于删除也会记录全部删除内容,所以可以用于恢复数据,但是占用空间较大。
  Mixed:
  这种格式是上面两种进行混合,由MySQL去判断是不是会发生主从不一致,进而选择合适的binlog格式
在生产中,大部分会使用双master,这时要小心binlog的循环复制问题,可以通过日志中记录的server id来解决。

参考文献

MySQL实战45讲

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值