• MySQL 基础知识梳理学习(七)----sync_binlog


    一般在生产环境中,很少用MySQL单实例来支撑业务,大部分的MySQL应用都是采用搭建集群的方法。搭建MySQL集群,可以进行数据库层面的读写分离、负载均衡或数据备份。基于MySQL原生的Replication是最常见的保证数据库安全的机制,满足数据库的高可用,在数据库发生宕机的情况后,其他节点还能快速提供服务,并且数据库的数据不丢失。

    Binlog是用来保存数据库修改的日志信息。一般的主从复制都是基于Binlog的,Binlog的安全直接关系到主从复制的安全,而Binlog的写入方式主要由参数sync_binlog来控制。参数取值主要如下:

    参数取值 影响的行为
    sync_binlog=0 事务提交时,MySQL将Binlog信息写入到Binlog文件(OS Cache)中,但是MySQL不控制Binlog的刷盘操作,由文件系统自己控制其缓存的刷新。缺点是,一旦操作系统宕机,在Binlog cache中的所有Binlog都会丢失。如果只是数据库宕机,而操作系统不宕机,那么数据库所生成的Binlog都不会丢失。
    sync_binlog=1 每一个事务提交时,MySQL都会把Binlog刷新到磁盘中,这样,数据库的安全性最高。缺点是,性能损耗是最大的。此设置可以保证,在数据库或者操作系统宕机的情况下,二进制日志中缺少的任何事务也只能处于准备阶段,那么导致服务器自动恢复时,会回滚这些事务,保证无数据丢失。虽然Binlog是顺序IO,但是多个事务同时提交,同样会对MySQL和IO的性能带来很大的影响,不过MySQL可以通过Group Commit来缓解这种压力。
    sync_binlog=N(N>1) 表示每N次事务提交,MySQL调用文件系统的刷新操作将缓存刷新到磁盘中。如果数据库或者操作系统在这个时候宕机,数据库库可能会丢失一些数据。

    附:两阶段提交

    MySQL在开启Binlog后,事务在提交时会自动被分成Prepare 和 Commit 两个阶段。

    * Prepare 阶段:告诉InnoDB引擎做Prepare,InnoDB更改事务状态,并将Redo log刷入磁盘。

    * Commit 阶段:先记录Binlog日志,然后告诉InnoDB引擎Commit。

    MySQL通过两阶段提交的方式保证宕机时数据的安全。 

    -----主要内容参考梳理于网络知识,此短文仅为学习笔记,在此原创作者感谢!

  • 相关阅读:
    localhost 和 127.0.0.1 认识
    postgreSQL可视化工具pgAdmin3 导入表结构和数据
    posgreSQL安装失败解决方案
    C#面向对象基本概念总结
    关于数据存储(关系型数据库和非关系型数据库)
    ADO.NET中的五大内置对象
    关于XML
    WPF中TreeView控件SelectedItemChanged方法的MVVM绑定
    WPF中使用MVVM进行multibinding
    WPF中TreeView控件数据绑定和后台动态添加数据(二)
  • 原文地址:https://www.cnblogs.com/xuliuzai/p/10391922.html
Copyright © 2020-2023  润新知