一般在生产环境中,很少用MysqL单实例来支撑业务,大部分的MysqL应用都是采用搭建集群的方法。搭建MysqL集群,可以进行数据库层面的读写分离、负载均衡或数据备份。基于MysqL原生的Replication是最常见的保证数据库安全的机制,满足数据库的高可用,在数据库发生宕机的情况后,其他节点还能快速提供服务,并且数据库的数据不丢失。
@R_502_5258@是用来保存数据库修改的日志信息。一般的主从复制都是基于@R_502_5258@的,@R_502_5258@的安全直接关系到主从复制的安全,而@R_502_5258@的写入方式主要由参数sync_@R_502_5258@来控制。参数取值主要如下:
参数取值 | 影响的行为 |
sync_@R_502_5258@=0 | 事务提交时,MysqL将@R_502_5258@信息写入到@R_502_5258@文件(OS Cache)中,但是MysqL不控制@R_502_5258@的刷盘 *** 作,由文件系统自己控制其缓存的刷新。缺点是,一旦 *** 作系统宕机,在@R_502_5258@ cache中的所有@R_502_5258@都会丢失。如果只是数据库宕机,而 *** 作系统不宕机,那么数据库所生成的@R_502_5258@都不会丢失。 |
sync_@R_502_5258@=1 | 每一个事务提交时,MysqL都会把@R_502_5258@刷新到磁盘中,这样,数据库的安全性最高。缺点是,性能损耗是最大的。此设置可以保证,在数据库或者 *** 作系统宕机的情况下,二进制日志中缺少的任何事务也只能处于准备阶段,那么导致服务器自动恢复时,会回滚这些事务,保证无数据丢失。虽然@R_502_5258@是顺序IO,但是多个事务同时提交,同样会对MysqL和IO的性能带来很大的影响,不过MysqL可以通过Group Commit来缓解这种压力。 |
sync_@R_502_5258@=N(N>1) | 表示每N次事务提交,MysqL调用文件系统的刷新 *** 作将缓存刷新到磁盘中。如果数据库或者 *** 作系统在这个时候宕机,数据库库可能会丢失一些数据。 |
附:两阶段提交
MysqL在开启@R_502_5258@后,事务在提交时会自动被分成Prepare 和 Commit 两个阶段。
* Prepare 阶段:告诉InnoDB引擎做Prepare,InnoDB更改事务状态,并将Redo log刷入磁盘。
* Commit 阶段:先记录@R_502_5258@日志,然后告诉InnoDB引擎Commit。
MysqL通过两阶段提交的方式保证宕机时数据的安全。
-----主要内容参考梳理于网络知识,此短文仅为学习笔记,在此原创作者感谢!
总结以上是内存溢出为你收集整理的MySQL 基础知识梳理学习(七)----sync_binlog全部内容,希望文章能够帮你解决MySQL 基础知识梳理学习(七)----sync_binlog所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)