mysql innodb 数据安全性分析

本文分析了MySQL InnoDB数据安全的关键参数sync_binlog和innodb_support_xa,探讨了事务日志和binlog如何协同工作以保证数据一致性。在不同参数设置下,可能出现的数据丢失场景和最理想的配置方案也被详述。
摘要由CSDN通过智能技术生成

影响数据安全的几个参数

innodb_flush_log_at_trx_commit 
0
log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作
log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作
1
每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去
mysql服务崩溃,不会丢失数据
2
每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行
MySQL会每秒执行一次 flush(刷到磁盘)操作
        OS崩溃或机器崩溃,会丢失1秒 log数据
        MySQL会每秒执行一次 flush(刷到磁盘)操作
详细差别见下图:


sync_binlog 

0
像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
n ,n>0
MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
1
最安全,每次写binary log 都写入到磁盘
最安全,每次写binary log 都写入到磁盘

innodb_support_xa
innodb_support_xa=true
此时MySQL首先要求innodb prepare,对应的redolog 将写入log buffer;如果有其他的引擎,其他引擎也需要做事务提交的prepare,然后MySQL server将binlog将写入;并通知各事务引擎真正commit;InnoDB将commit标志写入,完成真正的提交,响应应用程序为提交成功。
innodb_support_xa=false
redolog和binlog将无法同步,可能存在事务在主库提交,但是没有记录到binlog的情况。这样也有可能造成事务数据的丢失。

innodb_flush_method
字典
fdatasync
日志文件和数据文件写入后在进行文件刷新时:调用fsync()系统调用
O_DSYNC
打开日志文件是带上0_DSYNC标志;数据文件写入后在进行文件刷新时:调用fsync()系统调用
O_DIRECT
日志文件和数据文件写入后在进行文件刷新时:调用fsync()系统调用
打开数据文件时使用参数O_DIRECT

详细差别见下图:



mysql 事务日志 和binlog 如何协同工作

ib_logfile是InnoDB的事务日志文件。ib_logfile与bin-log共同控制事务恢复。本文简要说明其写入时机、写入策略, 以及分析系统异常对主从数据一致性的影响。

1、              基本概念 

     a)        ib_logfile文件个数由innodb_log_files_in_group配置决定,若为2,则在datadir目录下有两个文件,命令从0开始,分别为ib_logfile0和ib_logfile1.

     b)        文件为顺序写入,当达到最后一个文件末尾时,会从第一个文件开始顺序复用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值