innodb_flush_log_at_trx_commit和sync_binlog参数详解

        标签:                             innodb_flush_log_at_                     sync_binlog                     优化                             
2016年01月02日 16:11:54         4845人阅读         评论(0)         收藏                          举报                             

                 分类:            
MySQL(24)                                                              

作者同类文章                             X                        

版权声明:本文为博主原创文章,未经博主允许不得转载。                https://blog.csdn.net/thundermeng/article/details/50448614

innodb_flush_log_at_trx_commit和sync_binlog是MySQL innodb引擎的两个重要的参数,其中innodb_flush_log_at_trx_commit是将事务日志从innodb log buffer写入到redo log中,sync_binlog是将二进制日志文件刷新到磁盘上。
innodb事务日志redo,binlog逻辑过程如下: 1.事务写入redo log buffer中; 2.将log buffer刷新到redo log中,不过会先写一个TX PREPARE标记; 3.写binlog 4.在redo log中写入TX COMMIT标记; 5.将写binlog成功的标记写入redo log。
参数解析如下:  innodb_flush_log_at_trx_commit = N: 
N=0    每隔一秒,把事务日志缓存区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上;    log buffer 会 每秒写入到日志文件并刷写(flush)到磁盘。但每次事务提交不会有任何影响,也就是 log buffer 的刷写操作和事务提交操作没有关系。在这种情况下,MySQL性能最好,但如果 mysqld 进程崩溃,通常会导致最后 1s 的日志丢失。     N=1    每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上;      当取值为 1 时,每次事务提交时,log buffer 会被写入到日志文件并刷写到磁盘。这也是默认值。这是最安全的配置,但由于每次事务都需要进行磁盘I/O,所以也最慢。
N=2    每事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度;      当取值为 2 时,每次事务提交会写入日志文件,但并不会立即刷写到磁盘,日志文件会每秒刷写一次到磁盘。这时如果 mysqld 进程崩溃,由于日志已经写入到系统缓存,所以并不会丢失数据;在操作系统崩溃的情况下,通常会导致最后 1s 的日志丢失。  上面说到的「最后 1s」并不是绝对的,有的时候会丢失 更多数据。有时候由于调度的问题,每秒刷写(once-per-second flushing)并不能保证 100% 执行。对于一些数据一致性和完整性要求不高的应用,配置为 2 就足够了;如果为了最高性能,可以设置为 0。有些应用,如支付服务,对一致性和完整性要求很高,所以即使最慢,也最好设置为 1.        当我们设置为2 的时候,Log Thread 会在我们每次事务结束的时候将数据写入事务日志,但是这里的写入仅仅是调用了文件系统的文件写入操作。而我们的文件系统都是有缓存机制的,所以Log Thread 的这个写入并不能保证内容真的已经写入到物理磁盘上面完成持久化的动作。文件系统什么时候会将缓存中的这个数据同步到物理磁盘文件Log Thread 就完全不知道了。所以,当设置为2 的时候,MySQL Crash 并不会造成数据的丢失,但是OS Crash 或者是主机断电后可能丢失的数据量就完全控制在文件系统上了。各种文件系统对于自己缓存的刷新机制各不一样,大家可以自行参阅相关的手册。        sync_binlog =  N: 
N>0    每向二进制日志文件写入N条SQL或N个事务后,则把二进制日志文件的数据刷新到磁盘上;  N=0    不主动刷新二进制日志文件的数据到磁盘上,而是由操作系统决定; 
推荐配置组合: 
N=1,1  — 适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如充值消费系统;  N=1,0  — 适合数据安全性要求高,磁盘IO写能力支持业务不富余,允许备库落后或无复制;  N=2,0或2,m(0<m<100)  — 适合数据安全性有要求,允许丢失一点事务日志,复制架构的延迟也能接受;  N=0,0  — 磁盘IO写能力有限,无复制或允许复制延迟稍微长点能接受,例如:日志性登记业务;    当两个参数设置为双1的时候,写入性能最差,sync_binlog=N (N>1 ) innodb_flush_log_at_trx_commit=2 时,(在当前模式下)MySQL的写操作才能达到最高性能。 
数据安全性   当innodb_flush_log_at_trx_commit和sync_binlog  都为1时是最安全的,在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。但是鱼与熊掌不可兼得,都为1会导致频繁的IO操作,因此该模式也是最慢的一种方式。  当innodb_flush_log_at_trx_commit设置为0,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。  当innodb_flush_log_at_trx_commit设置为2,只有在操作系统崩溃或者系统掉电的情况下,上一秒钟所有事务数据才可能丢失。

双1适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如订单,交易,充值,支付消费系统。双1模式下,当磁盘IO无法满足业务需求时,推荐的做法是innodb_flush_log_at_trx_commit=2 ,sync_binlog=N (N为500 或1000) 且使用带蓄电池后备电源的缓存cache,防止系统断电异常。

转载于:https://www.cnblogs.com/gaoyuechen/p/8628133.html

innodb_flush_log_at_trx_commit和sync_binlog参数详解相关推荐

  1. MySQL配置文件参数详解

    [client] port = 3307 socket = /usr/local/mysql5_6/mysql.sock default-character-set=utf8 [mysql] prom ...

  2. mysql5.6主从参数详解

    mysql5.6的主从相当的不错,增加了不少参数,提升了主从同步的安全和效率,以下是mysql5.6主从参数详解. ######################################### ...

  3. mysql innodb_log_group_home_dir_InnoDB参数详解

    1.查询5.5版本的InnoDB参数并注释: [root@localhost etc]# grep -i innodb my.cnf; t_innodb; otherwise, slaves may ...

  4. CI流水线配置文件参数详解(一)

    文章目录 4. 参数详解(一) 4.1 ``script`` 4.2 ``image`` 指定使用Docker镜像.如 ``iamge:name`` ,暂时忽略. 4.3 ``before_scrip ...

  5. 内存性能参数详解(转载)

    内存性能参数详解 先说说最有效提高你机器内存性能的几个参数:CL,TRP,TRCD CAS Latency "列地址选通脉冲潜伏期" BIOS中可能的其他描述为:tCL.CAS L ...

  6. spring boot 实战 / 可执行war启动参数详解

    概述   上一篇文章<spring boot 实战 / mvn spring-boot:run 参数详解>主要讲解了spring boot 项目基于maven插件启动过程中借助profil ...

  7. 调包侠福音!机器学习经典算法开源教程(附参数详解及代码实现)

    Datawhale 作者:赵楠.杨开漠.谢文昕.张雨 寄语:本文针对5大机器学习经典算法,梳理了其模型.策略和求解等方面的内容,同时给出了其对应sklearn的参数详解和代码实现,帮助学习者入门和巩固 ...

  8. plot参数详解python_30行Python代码实现3D数据可视化

    作者:潮汐 来源:Python技术 欢迎来到编程教室~ 我们之前的文章中有讲解过不少 Matplotlib 的用法,比如: 完成这50个Matplotlib代码,你也能画出优秀的图表 25个常用Mat ...

  9. Ehcache配置参数详解

    ehcache配置参数详解 <?xml version="1.0" encoding="UTF-8"?><ehcache><dis ...

最新文章

  1. Java虚拟机规范(目录)
  2. Keepalived原理与实战精讲
  3. 当前目录下所有代码中查找
  4. 超图预览osgb格式倾斜摄影文件
  5. linux查看最近修改过的文件
  6. 35岁以前把下面十件事做好
  7. 模式三工厂——开花结果
  8. Huffman编码树
  9. 1 ELK安装部署并监控nginx
  10. 正文内容 SQL Server 数据库清除日志
  11. 偷窥Selenium4 0带有网芯的相对定位器3 1
  12. html表单与表格,HTML--表格与表单(示例代码)
  13. 黑群晖vmm专业版_教你群晖用自带的VMM虚拟机安装精简版win10系统教程
  14. pdf签名无效解决办法_谁告诉你PDF不能修改了?我不仅可以直接编辑,还能随便转化格式!...
  15. 实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端
  16. 动物名称日语单词集合
  17. Python学习第一课——爬取模特秀网站的模特图片
  18. vue-chartjs
  19. Java Log4j和Log4j2的区别
  20. modprobe加载异步加载

热门文章

  1. 屋子里有1到100号100盏关闭的灯
  2. Test: 为WLW添加源代码着色插件WindowsLiveWriter.CNBlogs.CodeHighlighter
  3. 地铁19号线首段盾构区间双线贯通
  4. SAP HANA Express Edition (HXE)-二进制安装使用步骤
  5. EasyUI笔记(六)数据表格
  6. JavaScript中解决Microsoft.XMLHTTP乱码的最简单方法
  7. gitlab一键安装 笔记
  8. 第十一章 Shell常用命令与工具(一)
  9. 网络虚拟化技术(二): TUN/TAP MACVLAN MACVTAP
  10. 浏览器用户用滤镜实现网页的翻转效果