影响数据安全的几个参数
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(刷到磁盘)操作
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的情况。这样也有可能造成事务数据的丢失。
字典
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) 文件为顺序写入,当达到最后一个文件末尾时,会从第一个文件开始顺序复用。