mysql+tmp满+crash_案例分享-MySQL服务器/tmp目录被占满

news/2024/7/5 13:56:22

案例分享-MySQL服务器/tmp目录被占满

描述:

MySQL服务器在每天的22点/tmp目录磁盘空间被占满,持续10分钟左右,然后自动恢复./tmp目录大小10G,平时可用空间8G左右.MySQL版本5.5

分析

1.在问题出现时,进入/tmp目录,ls –al查看具体文件.

2.在问题出现时,登录MySQL,执行show processlist查看是否存在异常SQL.

3.查看MySQL慢查询日志.

4.MySQL配置情况:

a)default_storage_engine         = InnoDB

b)transaction_isolation           = READ-COMMITTED

c)binlog_format                 = mixed

d)binlog_cache_size              = 32K

e)max_binlog_cache_size         = 18446744073709547520

f)tmpdir                       = /tmp

总结

1.InnoDB存储引擎,在READ-COMMITTED事务隔离级别的情况下(默认的级别是REPEATABLE-READ),普通的DELETE操作,在记录binlog的时候,会采用ROW模式.(暂时还不清楚原因,以后分析).

2.程序在每天的22点,有一个清理的定时任务.自动删除R表的数据,如下:

delete from R

where time < xxx;

将某天之前的数据清除.但是该表比较大,近50G.

3.MySQL参数

binlog_cache_size

max_binlog_cache_size

参考http://dev.mysql.com/doc/refman/5.5/en/replication-options-binary-log.html

4.每次执行定时任务的时候,因为binlog记录的是ROW模式,再加上表的数据量比较大,binlog缓存一定会超过32K,结果就会在/tmp目录下生成临时文件(参考: When a thread that handles

the transaction starts, it allocates a buffer of binlog_cache_size to

buffer statements. If a statement is bigger than this, the thread opens a

temporary file to store the transaction. The temporary file is deleted when the

thread ends),MySQL默认配置,在64位系统情况下,binlog文件大小最大可以达到16EB.但是系统的/tmp目录是10G,所以事务执行一半,磁盘空间被占满,事务回滚.

5.事后查看R表的数据以及binlog记录,验证了第4步的推论.

解决

在没有新数据写入的前提下,把确定保留的数据先放到新表里面,然后删除旧表,再把新表重命名.

create table R_20130220 select * FROM R where  time >= xxx;

DROP TABLE R;

RENAME TABLE R_20130220 TO R;

隔天观察nagios和cacti监控,故障恢复.


http://www.niftyadmin.cn/n/4607832.html

相关文章

使用UIAppearance 协议自定义视图

&#xfeff;&#xfeff;在iOS 5以前&#xff0c;自定义原生控件的外观并没有原生支持&#xff0c;因此开发人员感觉很麻烦。开发人员经常面临的问题是修改一个控件所有实例的外观。解决这个问题的正确方法是重写一遍控件。但由于这么做非常费时&#xff0c;一些开发人员开始覆…

11月17日云栖精选夜读:继浸没液冷后,阿里再推国内首个锂电池服务器

2019独角兽企业重金招聘Python工程师标准>>> 双11购物狂欢节从2009年开始至今&#xff0c;每年巨大成交量的背后有数十万台服务器进行复杂的运算&#xff0c;处理着数亿次的交易。作为阿里巴巴集团的基础设施&#xff0c;数据中心、服务器、网络承担了大量的信息处理…

android 清空路由表,关于react-native中的navigation重置路由和安卓物理返回键的清空上一页状态(重置上一页)...

在开发rn中经常会遇到路由返回时需要重置上一页的状态&#xff0c;也就是清除上一页的路由缓存&#xff0c;这样当你返回上一页的时候&#xff0c;页面就会重新执行componentDidMount等生命周期&#xff0c;直接上代码&#xff1a;import { StackActions, NavigationActions } …

洛谷 P2519 [HAOI2011]problem a

传送门 考虑转化为求最多说真话的人数 设$f(i)$表示排名前$i$的人中最多说真话的人的数量&#xff0c;考虑转移&#xff0c;如果由$j$转移而来&#xff0c;可以设$[j,i]$之间的人全都分数相等&#xff0c;那么式子就是$f[i]f[j-1]sum([j,i])$&#xff0c;其中$sum([j,i])$表示处…

ZeroMQ - 三种模型的python实现

ZeroMQ是一个消息队列网络库&#xff0c;实现网络常用技术封装。在C/S中实现了三种模式&#xff0c;这段时间用python简单实现了一下&#xff0c;感觉python虽然灵活。但是数据处理不如C自由灵活。 1.Request-Reply模式&#xff1a; 客户端在请求后&#xff0c;服务端必须回响应…

iOS 网络编程(1)

HTTP定义了一种在服务器和客户端之间传递数据的途径。 URL定义了一种唯一标示资源在网络中位置的途径。 客户端先建立一个TCP连接&#xff0c;然后发送一个请求。服务器受到请求处理后发送一个响应向客户端传递数据。然后客户端可以继续发送请求或者关闭这个TCP连接。 HTTPS&am…

mysql 12142_求一个PHP+MYSQL的功能齐全的类!

展开全部class mysql{private $db_host; //数据库主机private $db_user; //数据库用32313133353236313431303231363533e4b893e5b19e31333264646431户名private $db_pwd; //数据库用户名密码private $db_database; //数据库名private $conn; //数据库连接标识;private $result; …

android客户端登录,从android客户端登录appengine

我正在尝试登录到应用引擎的appengine并访问应用引擎中的用户服务API.基本上我希望能够看到谁登录到我的servlet.我正在使用从android获取authtoken的身份验证流程,然后从app引擎获取ASID(或SACID)cookie.然后将cookie与http请求一起发送到appengine servlet.这似乎工作得很好,…