主从复制主数据库发生宕机,binlog文件还存在吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主从复制主数据库发生宕机,binlog文件还存在吗相关的知识,希望对你有一定的参考价值。

存在。mysql主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志 binlog 功能。简单的说,就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制,然后再解析日志并应用到自身,最终实现 从库 的数据和 主库 的数据保持一致。 参考技术A 返回主页
东山絮柳仔
博客园
首页
联系
管理
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引擎

以上是关于主从复制主数据库发生宕机,binlog文件还存在吗的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的Binlog与主从复制

Mysql主从复制方式以及可能出现的问题

MySQL主从复制(异步模式)

133期MySQL主从复制的几种复制方式

mysql -主从配置

Mysql主从