Binlog 太大导致无法解析怎么办?
由于业务写入了一条大事务,导致 MySQL 的 binlog 膨胀。在解析大的 binlog 时,经常会遇到这个问题,导致无法解析,没有其他工具的情况下,很难分析问题。
作者:孙绪宗,新浪微博 DBA 团队工程师,主要负责 MySQL、PostgreSQL 等关系型数据库运维。
爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
本文共 3200 字,预计阅读需要 10 分钟。
故障现象
由于业务写入了一条大事务,导致 MySQL 的 binlog 膨胀。在解析大的 binlog 时,经常会遇到这个问题,导致无法解析,没有其他工具的情况下,很难分析问题。
故障复现
[root@xuzong mysql]# ls -lh mysql-bin.003300 -rw-r----- 1 my3696 mysql 6.7G Oct 30 16:24 mysql-bin.003300 [root@xuzong mysql]# /usr/local/mysql-5.7.35/bin/mysqlbinlog -vv mysql-bin.003300 > 1.sql mysqlbinlog: Error writing file '/tmp/tmp.0Uirch' (Errcode: 28 - No space left on device) mysqlbinlog: Error writing file '/tmp/tmp.0Uirch' (Errcode: 28 - No space left on device) mysqlbinlog: Error writing file '/tmp/tmp.0Uirch' (Errcode: 28 - No space left on device) mysqlbinlog: Error writing file '/tmp/tmp.0Uirch' (Errcode: 28 - No space left on device) mysqlbinlog: Error writing file '/tmp/tmp.334z3P' (Errcode: 28 - No space left on device) mysqlbinlog: Error writing file '/tmp/tmp.0Uirch' (Errcode: 28 - No space left on device) mysqlbinlog: Error writing file '/tmp/tmp.0Uirch' (Errcode: 28 - No space left on device) mysqlbinlog: Error writing file '/tmp/tmp.0Uirch' (Errcode: 28 - No space left on device) mysqlbinlog: Error writing file '/tmp/tmp.0Uirch' (Errcode: 28 - No space left on device) mysqlbinlog: Error writing file '/tmp/tmp.0Uirch' (Errcode: 28 - No space left on device)
猜测
- 可能是配置文件中 tmpdir 的问题,但是修改这个得重启 MySQL。
- 能不能在不重启 MySQL 的情况下,修改这个临时空间。
验证猜测
猜测一
看一下 my.cnf 设置的 tmpdir,发现并不是使用的这个参数,看来猜测一不对。
[root@mysql mysql]# cat my.cnf | grep tmpdir tmpdir = /data1/dbatemp
猜测二
网上搜了一下,大部分是讲临时表满怎么解决的,也就是猜测一的方案,并没有很明确的方法来修改 mybinlog 解析时,所使用的的临时句柄占用空间。
问题分析
只能看看源码,看一下 mysqlbinlog 到底是怎么获取 tmpdir 的。
mysqbinlog.cc int main(int argc, char** argv) { ........ MY_TMPDIR tmpdir; tmpdir.list= 0; if (!dirname_for_local_load) { if (init_tmpdir(&tmpdir, 0)) exit(1); dirname_for_local_load= my_strdup(PSI_NOT_INSTRUMENTED, my_tmpdir(&tmpdir), MY_WME); } ........ } mf_tempdir.cc my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist) { char *end, *copy; char buff[FN_REFLEN]; DBUG_ENTER("init_tmpdir"); DBUG_PRINT("enter", ("pathlist: %s", pathlist ? pathlist : "NULL")); Prealloced_array<char*, 10, true> full_list(key_memory_MY_TMPDIR_full_list); memset(tmpdir, 0, sizeof(*tmpdir)); if (!pathlist || !pathlist[0]) { /* Get default temporary directory */ pathlist=getenv("TMPDIR"); /* Use this if possible */ //这里能看到是获取的机器环境变量 #if defined(_WIN32) if (!pathlist) pathlist=getenv("TEMP"); //windows是temp if (!pathlist) pathlist=getenv("TMP"); //linux是tmp #endif if (!pathlist || !pathlist[0]) pathlist= DEFAULT_TMPDIR; } ........ }
好家伙,竟然是获取的机器环境变量,那么这个问题就解决了。
问题处理
临时修改一下机器的 tmpdir 变量即可。
[root@mysql mysql]# export TMPDIR="/data1" [root@mysql mysql]# echo ${TMPDIR:-/tmp} [root@xuzong mysql]# /usr/local/mysql-5.7.35/bin/mysqlbinlog -vv mysql-bin.003300 > 1.sql
总结
- 有问题还是要看看源码。
- 可以考虑使用 binlog 解析工具,比如 bin2sql 解决问题。
- 可以看看慢日志里是否有记录。
补充
原来这个问题在 MySQL 官方手册 中有所描述,在此做一个补充。
When running mysqlbinlog against a large binary log, be careful that the filesystem has enough space for the resulting files. To configure the directory that mysqlbinlog uses for temporary files, use the TMPDIR environment variable.
更多技术文章,请访问:https://opensource.actionsky.com/
关于 SQLE
SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。
SQLE 获取
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
百度搜索万亿规模特征计算系统实践
作者 | Jay 导读 本文主要介绍百度搜索在全网万亿级规模内容做内容理解的工程实践,涉及机器学习工程化、资源调度、存储优化等多个Topic。 全文6648字,预计阅读时间17分钟。 01 业务背景 百度收录了互联网海量内容,要索引这些内容,需要先对内容做深度理解,提取包括内容语义、内容质量、内容安全等多维度信息,从而进一步支持内容筛选过滤、语义建库等需求。对全网海量内容做深度理解,挑战是非常大的,主要是体现在成本和效率上。 在成本上,计算量非常大,除了因全网内容数据量大(万亿规模)、特征数多外,有两个趋势也加剧了计算压力,一方面是互联网内容图文化、视频化比例持续大幅增长,图片/视频的计算量远大于文本,另一方面,深度学习技术大规模应用,特别近期大模型的兴起,对算力需求也随之剧增。在效率上,怎么让系统更易用,尽可能地提升业务迭代效率,是所有工程系统的核心目标之一。 02 关键思路 (1)成本优化:要满足如此庞大的算力需求,需要极致地『开源节流』。 1.『开源』:尽可能扩大计算资源池,通过采购来满足ROI低,挖潜现有资源是关键。从公司整体看,资源使用并不充分,在线资源存在波峰波谷,库存空闲...
- 下一篇
不用狂卷摄像头了,手机行业的大模型比武还有多少惊喜?
从“快”到“远”,OPPO大模型的新发力 “天下武功,唯快不破”——在大模型这里可能要打上一个问号。 在一条漫长的赛道上,不是“快”就是最好,也许“远”才是王道。 11 月 16 日,在 OPPO 开发者大会(ODC)上,OPPO 正式推出自主训练的个性专属大模型与智能体—— 安第斯大模型AndesGPT,并宣布开源以 AndesGPT 为核心打造的智能体框架。 作为驱动 OPPO 公司 AI 战略的核心引擎,AndesGPT 全面赋能 OPPO 智慧终端,持续构建知识、记忆、工具、创作能力,并通过与终端结合的 AI 智能体和多模态对话范式,将给用户带来全新的个性专属智能体验。 本次大会,人们能够看到 OPPO 不仅在大模型技术层面进行了创新和突破,同时在构建大模型应用生态方面也有着自己的思考。当前,国内一线手机厂商已经正式进入大模型应用的公开竞速赛道,谁跑得快可能已经分出结果,但是跑得远还要拭目以待。 那,在AI 这条赛道上,OPPO 将如何发力呢? 智慧终端的领头羊,入局就带来两大组合创新 在智能终端领域,OPPO 一直都是佼佼者。这几年在 AI 领域的探索和突破,OPPO ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7设置SWAP分区,小内存服务器的救世主