墨墨导读:MySQL生态中服务层的二进制日志有着非常重要的作用,MVCC机制不用的binlog,是否可以去掉?本文作者详述对MySQL的binlog cache的理解。

数据技术嘉年华,十周年盛大开启,点我立即报名!大会以“自研·智能·新基建——云和数据促创新 生态融合新十年” 为主题,相邀数据英雄,总结过往十年历程与成绩,展望未来十年趋势与目标!近60场演讲,大咖云集,李飞飞、苏光牛、林晓斌、黄东旭...,快来pick你喜欢的嘉宾主题吧!

MySQL生态中服务层的二进制日志有着非常重要的作用,有人问过MVCC机制不用的binlog,是否可以去掉,答案是否。binlog用于记录用户对数据库操作的SQL语句(除了数据查询语句),但同时用于保障高可用架构中的复制方式。

本文从一个日常不太关心的参数开始,了解一下mysql的binlog cache。

crash的截图内容:

2020-08-01T05:44:04.068924+08:00 674
[ERROR] An error occurred during flush stage of the commit.
'binlog_error_action' is set to 'IGNORE_ERROR'.
Hence turning logging off for the whole duration of the MySQL server process.
To turn it on again: fix the cause, shutdown the MySQL server and restart it.

从上述错误信息中了解到奥binlog flush无法进行下去,抛出binlog_error的异常,最终导致MySQL crash。

1)从上述错误中binlog_error_action

binlog_error_action:这个参数的意义在保证正确的写入binary log日志,
,默认值为 ABORT_SERVER,当出现错误的时候会使 MySQL 在写 binlog 遇到严重错误时直接退出( 即 Crash 动作)

当binlog_error_action设置为IGNORE_ERROR时,如果服务器遇到这样的错误,它将继续正在进行的事务,记录错误,然后停止日志记录,并继续执行更新。要恢复二进制日志记录,必须再次启用log_bin,这需要重新启动服务器。

2)从上述描述中可以推测到跟binlog写入有关。

mysql里binlog里参数有以下两个binlog_cache_size,max_binlog_cache_size,以下两个参数都是会话级别的。

binlog_cache_size:
在事务期间用于保存对二进制日志的更改的缓存的大小。二进制日志缓存分配给每个客户端服务器是否支持任何事务性存储引擎,如果服务器启用了二进制日志(——log-bin选项)。如果经常使用大型事务,可以增加缓存大小以获得更好的性能。

Binlog_cache_use和Binlog_cache_disk_use状态变量可以用于调优这个变量的大小

max_binlog_cache_size:
会话级别的参数,如果一个事务需要超过这么多字节的内存,服务器就会生成一个多语句事务,该事务需要超过’max_binlog_cache_size’字节的存储错误。最小值是4096。最大可能值为16EB (exabytes)。推荐最大值为4GB;这是因为MySQL目前无法处理大于4GB的二进制日志位置。
max_binlog_cache_size仅设置事务缓存的大小;语句缓存的上限由max_binlog_stmt_cache_size系统变量控制。

从以上理解来看 就是说binlog缓存大小无法超过4G的大小限制。

3)binlog_cache_size大小如何控制:

Binlog_cache_use:使用二进制日志缓存的事务数。
Binlog_cache_disk_use:使用临时二进制日志缓存但超过binlog_cache_size值并使用临时文件存储事务语句的事务数。
Binlog_stmt_cache_use:使用二进制日志语句缓存的非事务性语句的数量。
Binlog_stmt_cache_disk_use:使用二进制日志语句缓存但超过binlog_stmt_cache_size值并使用临时文件存储这些语句的非事务语句的数量。

4)从源码分析:

报错MYSQL_BIN_LOG::handle_binlog_flush_or_sync的时候触发的错误

分析1:无法创建io 缓存的时候出现问题Could not create IO cache 就是所谓的空间不足的情况

binlog cache 不够的时候使用tmp空间, No space left on device 即临时目录空间不足,在 同一个会话下 执行 commit 或者 再开启一个事务 就会立即触发 binlog_error_action,导致 MySQL 立即崩掉,且 errorlog 里会出现 binlog error 报错。

临时表需要设置一定的范围:

innodb_temp_data_file_path = ibtmp1:1G:autoextend:max:100G

分析2:MYSQL_BIN_LOG::ordered_commit

以下有两个阶段 flush 和sync阶段

  • flush stage:通知底层存储引擎日志刷盘

  • binlog fsync:落盘 

这两个过程基本跟刷磁盘有关联,一般出现问题的情况是硬盘空间出现坏道,或则 刷盘过程中出现外部原因导致服务器突然crash。 如:停电

这时需要重新启动服务70%以上能自动检测恢复,如不行需要通过innodb_force_recovery进行启动,这样就比较麻烦,需要mysqldump导出,导入数据方式重新搭建。

总结

1.binlog_cache设置要合理化,默认是32k ,按照服务器资源情况,建议改成 1M~16M
2.尽量避免大事务,除非用到大事务也需要通过global status 状态进行合理设置 相关参数
3.建立监控报警体系是预防这类问题的最好方式。

数据技术嘉年华,汇聚业内多种数据库最佳实践和顶级技术专家,只为总结 2020 ,与您尽享技术前沿,领先一步卓立变革潮头!

墨天轮原文链接:https://www.modb.pro/db/33376(复制到浏览器中打开或者点击“阅读原文”)

2020 数据技术嘉年华,现在加入,尽享超低票价优惠:

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

MySQL binlog_error_action分析相关推荐

  1. Mysql元数据分析

    Mysql元数据分析 一.information_schema库 information_schema库中的表,保存的是Mysql的元数据. 官网元数据表介绍 InnoDB相关的表介绍 库中有表: + ...

  2. MYSQL:explain分析

    mysql explain分析 通过explain可以知道mysql是如何处理语句,分析出查询或是表结构的性能瓶颈.通过expalin可以得到: 1. 表的读取顺序 2.表的读取操作的操作类型 3.哪 ...

  3. MySQL索引分析和优化(转)

    MySQL索引分析和优化(转) 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记 录,直至找到符 ...

  4. mysql genlog 分析_Mysq性能分析 —— Genral log(普通日志)与 Slow log(慢速日式)...

    对Mysql进行深入的分析对于发现mysql性能瓶颈和寻找优化策略是十分必要的. 我们可以从不同的粒度上对Mysql进行分析:可以整体分析服务器,或者检查单个查询或批查询. 通过分析,我们得到的如下信 ...

  5. MySQL性能分析及explain的使用

    MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析结果 如explai ...

  6. MySQL 索引分析除了 EXPLAIN 还有什么方法?

    作者 | adrninistrat0r 责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 前言 对于非数据库开发人员而言,难以对MySQL源码进行分析或调试,接近一个黑盒,但MySQL提供 ...

  7. (3.13)mysql基础深入——mysql日志分析工具之mysqlsla【待完善】

    (3.13)mysql基础深入--mysql 日志分析工具之mysqlsla 关键字:Mysql日志分析工具.mysqlsla 常用工具 [1]mysqldumpslow:官方提供的慢查询日志分析工具 ...

  8. MySQL 性能分析 之 联合索引(复合索引)实践分析

    MySQL 性能分析 之 联合索引(复合索引)实践分析 作为开发者,大家都知道,一个服务器.一个数据库的性能是项目的重中之重,后台架构.写法与数据库设计的好坏往往直接影响到整个项目的性能. 索引:是当 ...

  9. php mysql索引原理_加速PHP动态网站 关于MySQL索引分析优化

    本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第 ...

最新文章

  1. kafka源码分析(二)Metadata的数据结构与读取、更新策略
  2. 黑客暗网叫卖Zoom账号密码,1分钱能买71个,加密大佬教袁征做人,17年前开源软件现在又火了...
  3. 局部变量java6_java字节码-几种字符串局部变量用法的区别
  4. 字节输出流的续写和换行
  5. asp.net生命周期
  6. 疲软惠普转型痛,逆增联想心头乐
  7. 为什么在极端恶劣环境下不能使用商用以太网交换机?
  8. STM32嵌入式系统FreeRTOS使用cJSON解析和构建JSON
  9. 12岁女孩自学成才考上亚利桑那大学,博士母亲的家庭教育造就「天才少女」...
  10. 分享一下我作为面试官面试了几个java程序员后的感受
  11. docker管理神器—kubernetes—直接路由篇
  12. 《土豆荣耀》重构笔记(七)控制角色移动并添加音效
  13. Linux-4.4-x86_64 内核配置选项简介
  14. 2021年南京市高考成绩查询,2021年南京各高中高考成绩排名及放榜最新消息
  15. 浅谈ERP项目团队管理的四个方面
  16. 艾克姆 蓝牙nRF52832上册-学习笔记
  17. 《把时间当朋友》 第六章交流 读书笔记
  18. html单击图片效果显示,html点击文字显示图片
  19. 是程序员都可能用到版本控制,如何使用它?如何在Vim中使用Git?
  20. 锐界机器人_钱江机器人/海峰机器人/锐界科技彰显“装配”技术实力

热门文章

  1. bash历史命令数_如何使用Bash历史记录命令
  2. 域控 只能访问特定网址_开发人员需要了解的特定于域的语言
  3. opensource项目_最佳Opensource.com:政府
  4. VSCode自定义代码片段9——JS中的面向对象编程
  5. Select2的使用 联动筛选框的一个例子
  6. 面试 | 阿里P7级别程序猿亲身告知,不会面试,还想进大厂?做梦吧
  7. 网络操作 回调函数 http
  8. 类和模块 类和原型 工厂方法 构造函数 constructor
  9. SLAM Cartographer(2)ROS封装
  10. Ubuntu开机出现“error: invalid environment block“的解决方法