MySQL主从复制的三种模式

前言

上一篇文章我们实现了主从复制https://blog.csdn.net/Delicious_Life/article/details/106154307

主从复制有三种模式,分别是基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)。对应的,binlog的格式也有三种:STATEMENT,ROW,MIXED

mysql默认的主从复制模式是ROW

模式划分

STATEMENT模式(SBR)

记录每一条SQL修改

每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条 sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。
缺点是在某些情况下会导致 master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
ROW模式(RBR)

仅记录修改的内容,不记录具体的SQL

不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。
缺点是会产生大量的日志,尤其是altertable的时候会让日志暴涨。
MIXED模式(MBR)

以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

建议使用MIXED模式~

如何更改主从复制的模式

先查看

show global variables like 'binlog%';
image.png

进入到master服务器的my.cnf文件中,增加一行,设置主从复制模式
重启master服务器的数据库

docker restart percona-master01 && docker logs -f percona-master01

再次查看,发现模式已经改成了MIXED

补充~
如果此时你发现主从同步失效了,我们可以再从新配置下

1.在从数据库输入命令,停止同步

stop slave;

2.在从库中重写配置与主库的关系(注意主库最新的file和pos要改过来)

CHANGE MASTER TO
    master_host='192.168.62.132',
    master_user='itcast',
    master_password='itcast',
    master_port=3306,
    master_log_file='mysql-bin.000003',
    master_log_pos=743;

3.从库开启同步功能

start slave;
OK了!
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • MySQL Replication (MySQL 主从复制) 是什么?为什么要主从复制以及它的实现原理是什么? M...
    CgySHFF阅读 3,440评论 0 2
  • Mysql一次主从复制需要有三个线程来实现,其中一个线程(Binlog dump thread)在主服务器上,其它...
    tracy_668阅读 8,251评论 0 4
  • 参考:深度探索MySQL主从复制原理 MySQL 主从复制概念 MySQL 主从复制是指数据可以从一个MySQL数...
    了凡_8504阅读 2,463评论 0 0
  • 概要 MySQL Replication (MySQL 主从复制) 是什么? 为什么要主从复制以及它的实现原理是什...
    安晓生阅读 2,361评论 0 0
  • mysql主从复制 主从复制慨述 构建大型,高性能应用程序的基础主服务器复制负责更新,且将更新写入二进制日志文件,...
    肖金光xjg阅读 4,662评论 0 1

友情链接更多精彩内容