我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql5.7主从同步中binlog同步模式是怎样的

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql5.7主从同步中binlog同步模式是怎样的

今天就跟大家聊聊有关mysql5.7主从同步中binlog同步模式是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

  mysql5.7主从同步中binlog同步模式(binlog_format)中MIXED模式效率和稳定性最好。

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

  一、同步模式

  1.STATEMENT模式(SBR)

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

  2.ROW模式(RBR)

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

  3.MIXED模式(MBR)

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

  二、binlog复制配置

  在mysql的配置文件my.cnf中,可以通过一下选项配置binglog相关

  binlog_format           = MIXED                         //binlog日志格式,mysql默认采用statement,建议使用mixed
  log-bin                 = /data/mysql/mysql-bin.log    //binlog日志文件
  expire_logs_days        = 7                           //binlog过期清理时间
  max_binlog_size         = 100m                       //binlog每个日志文件大小
  binlog_cache_size       = 4m                        //binlog缓存大小
  max_binlog_cache_size   = 512m                     //最大binlog缓存大小

  三、MIXED说明

  对于执行的SQL语句中包含now()这样的时间函数,会在日志中产生对应的unix_timestamp()*1000的时间字符串,slave在完成同步时,取用的是sqlEvent发生的时间来保证数据的准确性。另外对于一些功能性函数slave能完成相应的数据同步,而对于上面指定的一些类似于UDF函数,导致Slave无法知晓的情况,则会采用ROW格式存储这些Binlog,以保证产生的Binlog可以供Slave完成数据同步。

  现在来比较以下 SBR 和 RBR 2中模式各自的优缺点:

  SBR 的优点:

  历史悠久,技术成熟

  binlog文件较小

  binlog中包含了所有数据库更改信息,可以据此来审核数据库的安全等情况

  binlog可以用于实时的还原,而不仅仅用于复制

  主从版本可以不一样,从服务器版本可以比主服务器版本高

  SBR 的缺点:

  不是所有的UPDATE语句都能被复制,尤其是包含不确定操作的时候。

  调用具有不确定因素的 UDF 时复制也可能出问题

  使用以下函数的语句也无法被复制:

  * LOAD_FILE()

  * UUID()

  * USER()

  * FOUND_ROWS()

  * SYSDATE() (除非启动时启用了 --sysdate-is-now 选项)

  INSERT ... SELECT 会产生比 RBR 更多的行级锁

  复制需要进行全表扫描(WHERE 语句中没有使用到索引)的 UPDATE 时,需要比 RBR 请求更多的行级锁

  对于有 AUTO_INCREMENT 字段的 InnoDB表而言,INSERT 语句会阻塞其他 INSERT 语句

  对于一些复杂的语句,在从服务器上的耗资源情况会更严重,而 RBR 模式下,只会对那个发生变化的记录产生影响

  存储函数(不是存储过程)在被调用的同时也会执行一次 NOW() 函数,这个可以说是坏事也可能是好事

  确定了的 UDF 也需要在从服务器上执行

  数据表必须几乎和主服务器保持一致才行,否则可能会导致复制出错

  执行复杂语句如果出错的话,会消耗更多资源

  RBR 的优点:

  任何情况都可以被复制,这对复制来说是最安全可靠的

  和其他大多数数据库系统的复制技术一样

  多数情况下,从服务器上的表如果有主键的话,复制就会快了很多

  复制以下几种语句时的行锁更少:

  * INSERT ... SELECT

  * 包含 AUTO_INCREMENT 字段的 INSERT

  * 没有附带条件或者并没有修改很多记录的 UPDATE 或 DELETE 语句

  执行 INSERT,UPDATE,DELETE 语句时锁更少

  从服务器上采用多线程来执行复制成为可能

  RBR 的缺点:

  binlog 大了很多

  复杂的回滚时 binlog 中会包含大量的数据

  主服务器上执行 UPDATE 语句时,所有发生变化的记录都会写到 binlog 中,而 SBR 只会写一次,这会导致频繁发生 binlog 的并发写问题

  UDF 产生的大 BLOB 值会导致复制变慢

  无法从 binlog 中看到都复制了写什么语句

  当在非事务表上执行一段堆积的SQL语句时,最好采用 SBR 模式,否则很容易导致主从服务器的数据不一致情况发生

  另外,针对系统库 mysql 里面的表发生变化时的处理规则如下:

  如果是采用 INSERT,UPDATE,DELETE 直接操作表的情况,则日志格式根据 binlog_format 的设定而记录

  如果是采用 GRANT,REVOKE,SET PASSWORD 等管理语句来做的话,那么无论如何都采用 SBR 模式记录

  注:采用 RBR 模式后,能解决很多原先出现的主键重复问题。

看完上述内容,你们对mysql5.7主从同步中binlog同步模式是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql5.7主从同步中binlog同步模式是怎样的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MYSQL主库切换binlog模式后主从同步错误的解决方案

目录错误原因分析解决方案1. 确保主从库数据一致2. 切换binlog模式3. 重建从库4. 跳过异常错误总结在使用FlinkSQL的mysql-cdc连接器来监听MySQL数据库时,通常需要将MySQL的binlog模式设置为ROW模式。
MYSQL主库切换binlog模式后主从同步错误的解决方案
2024-08-09

Linux中的chrony时间同步服务是怎样的

这期内容当中小编将会给大家带来有关Linux中的chrony时间同步服务是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。对于多主机协作工作时, 时间同步显得非常的重要,时间不一致会造成很多重要应用的
2023-06-28

Java编程语言中注意线程安全和同步是怎样的

这篇文章给大家介绍Java编程语言中注意线程安全和同步是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java编程语言对于使用者来说是一个相当简单的编程语言。但是在使用的时候还是需要我们不断注意相关问题,下面我们
2023-06-17

计算机编程中线程同步,数据交换的序列图是怎样的

本篇内容介绍了“计算机编程中线程同步,数据交换的序列图是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!UML中的表现除了代码,多线程还
2023-06-19

编程热搜

目录