问题现象

突然接到线上Zabbix告警信息,报MYSQL所在的主机/分区不足15%,内容如下: Trigger: app-ali-prod-db1 / 可用空间不足 15%

Trigger status: PROBLEM

Trigger severity: Warning

Trigger URL:

Item values:

1. Free disk space on / (percentage) (app-ali-prod-db1:vfs.fs.size[/,pfree]): 12.68 %

2. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*

3. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*

接受到告警信息,那就登录到服务器看看怎么回事,什么东西占用了/分区: [nock@app-ali-prod-db1 nock]# sudo df -h

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 20G 15G 3.6G 87% /

tmpfs 7.8G 0 7.8G 0% /dev/shm

/dev/vdb 394G 124G 251G 34% /data

[nock@app-ali-prod-db1 nock]# sudo df -h

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 20G 19G 511M 98% /

tmpfs 7.8G 0 7.8G 0% /dev/shm

/dev/vdb 394G 124G 251G 34% /data

[nock@app-ali-prod-db1 nock]# sudo df -h

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 20G 19G 359M 99% /

tmpfs 7.8G 0 7.8G 0% /dev/shm

/dev/vdb 394G 124G 251G 34% /data

[nock@app-ali-prod-db1 nock]# sudo df -h

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 20G 19G 96M 100% /

tmpfs 7.8G 0 7.8G 0% /dev/shm

/dev/vdb 394G 124G 251G 34% /data

[nock@app-ali-prod-db1 nock]# sudo df -h

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 20G 19G 67M 100% /

tmpfs 7.8G 0 7.8G 0% /dev/shm

/dev/vdb 394G 124G 251G 34% /data

如上所示/分区的使用率还在一直变大,那就看看具体哪个分区下文件占用的: [nock@app-ali-prod-db1 ~]# sudo du -csh /*

6.2M /bin

90M /boot

124G /data

160K /dev

29M /etc

20K /home

234M /lib

23M /lib64

16K /lost+found

4.0K /media

4.0K /mnt

68K /opt

0 /proc

316K /root

16M /sbin

4.0K /selinux

4.0K /srv

513M /swapfile

0 /sys

320K /tmp

883M /usr

218M /var

126G 总用量

但是根据du命令统计,不对啊,那是什么占用了呢,只好去看看最近操作了什么。

原因分析

原来是因为最近在做MYSQL表优化的操作,既然是操作MYSQL引起的,那我就自然让我想起了MYSQL临时表了,那我们就先看看MYSQL产生临时表目录,线上怎么设置的: mysql> show variables like 'tmpdir';

+---------------+----------------------+

| Variable_name | Value |

+---------------+----------------------+

| tmpdir | /tmp |

+---------------+----------------------+

1 row in set (0.00 sec)

我们再来看看系统情况吧,看看临时文件情况: [nock@app-ali-prod-db1 ~]# sudo lsof |egrep 'tmp|deleted'

mysqld_sa 9847 root 2u CHR 136,1 0t0 4 /dev/pts/1 (deleted)

mysqld 11002 mysql 5u REG 252,1 0 663996 /tmp/ibqhlTQx (deleted)

mysqld 11002 mysql 6u REG 252,1 0 663997 /tmp/ibw9oKol (deleted)

mysqld 11002 mysql 7u REG 252,1 0 663998 /tmp/ibdyLBW8 (deleted)

mysqld 11002 mysql 8u REG 252,1 0 663999 /tmp/ib9Z2RkL (deleted)

mysqld 11002 mysql 12u REG 252,1 0 664000 /tmp/ibvDAytA (deleted)

mysqld 11002 mysql 60u REG 252,1 8092909568 661724 /tmp/ibzvPPU1 (deleted)

mysqld 11002 mysql 62u REG 252,1 0 661734 /tmp/ibam4uXx (deleted)

mysqld 11002 mysql 65u REG 252,1 4447010816 661735 /tmp/ib9ZmD63 (deleted)

mysqld 11002 mysql 78u REG 252,1 2729443328 661736 /tmp/ibDgZ9mA (deleted)

mysqld 11002 mysql 88u REG 252,1 1364197376 661737 /tmp/ibKU9e56 (deleted)

解决问题

原来如此,那只能设置一下tpmdir参数来改变临时表生成目录了: [nock@app-ali-prod-db1 ~]# sudo mkdir -pv /data/tmp/mysql

mysql> set global tmpdir='/data/tmp/mysql';

ERROR 1238 (HY000): Variable 'tmpdir' is a read only variable

通过提示可知tmpdir参数只是一个只读变量不能动态修改指定,那看来只能通过在配置文件my.cnf的mysqld下添加tmpdir配置了,配置如下: [mysqld]

tmpdir = /data/tmp/mysql

在配置文件my.cnf的[mysqld]下添加tmpdir = /data/tmp/mysql

重载MYSQL生效: /etc/init.d/mysqld reload

查看效果: mysql> show variables like 'tmpdir';

+---------------+----------------------+

| Variable_name | Value |

+---------------+----------------------+

| tmpdir | /data/tmp/mysql |

+---------------+----------------------+

1 row in set (0.00 sec)

如此看出已经生效,然后线上再也没有出现如此情况,问题得到解决。

总结教训

所以以后大家一定要谨记线上MYSQL一定要设置好tmpdir参数的配置,不要等到发生问题了再来补救;这里对于MYSQL为什么会生成临时表,什么情况下会生成临时表,后面的文章我们再介绍。

本文由 空心菜 创作,采用 知识共享署名4.0 国际许可协议进行许可

本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名

最后编辑时间为: Apr 23, 2018 at 03:01 pm

mysql导致根目录爆满_MYSQL临时表导致根分区爆满问题分析相关推荐

  1. mysql死锁无法查询_MySQL死锁导致无法查询

    客服反馈后台无法查询,原因大概知道,是因为MySQL的事务产生了死锁,以往都不知道是哪个事务锁住了,只能很粗暴地重启MySQL 最近查找到一个方法,不用重启MySQL,记录如下 登录到MySQL,来看 ...

  2. mysql xa测试方案_mysql xa导致的事务一直running问题

    背景描述 使用xa进行测试时,对mysql进行了一些xa各阶段锁定试验,后来出现卡死情况就杀掉了线程,重启了mysql服务.重启后发现插入.修改数据都正常,但无法修改表结构,修改表结构就处于卡死状态, ...

  3. mysql连接字符乱码_MySQL 字符集导致SQL连接之后中文乱码的问题!

    character-set-server = GB2312 collation-server = latin1_general_ci MySQL字符集 GBK.GB2312.UTF8区别 解决 MYS ...

  4. mysql数据库根目录恢复_MySQL中数据导入恢复的简单教程

    有两个简单的方法MySQL中的数据加载到MySQL数据库从先前备份的文件. LOAD DATA导入数据: MySQL提供了LOAD DATA语句,作为一个大容量数据加载.下面是一个例子声明中,读取一个 ...

  5. mysql数据库连接数瓶颈_MySQL数据库性能优化之硬件瓶颈分析

    在过往与很多人的交流过程中发现,在谈到基于硬件来进行数据库性能瓶颈分析的时候,常被大家误解为简单的使用更为强劲的主机或者存储来替换现有的设备. 个人觉得这其中可能存在一个非常大的误区.我们在谈论基于硬 ...

  6. mysql并发插入死锁_MySQL: 并发replace into的死锁问题分析-阿里云开发者社区

    测试版本:MySQL5.6.23测试表: create table t1 (a int auto_increment primary key, b int, c int, unique key (b) ...

  7. mysql 索引类型案例_Mysql索引类型与基本用法实例分析

    本文实例讲述了Mysql索引类型与基本用法.分享给大家供大家参考,具体如下: 索引 MySQL目前主要有以下几种索引类型: 普通索引 唯一索引 主键索引 组合索引 全文索引 - 普通索引 是最基本的索 ...

  8. mysql联合索引案例_mysql多个联合索引的案例分析

    mysql多个联合索引的案例分析 发布时间:2020-11-23 14:54:29 来源:亿速云 阅读:61 作者:小新 小编给大家分享一下mysql多个联合索引的案例分析,相信大部分人都还不怎么了解 ...

  9. mysql如何分表_MySQL分表和分区的具体实现方法

    垂直分表 垂直分表就是一个包含有很多列的表拆分成多个表,比如表A包含20个字段,现在拆分成表A1和A2,两个表各十个字段(具体如何拆根据业务来选择). 优势:在高并发的情境下,可以减少表锁和行锁的次数 ...

最新文章

  1. centos python2.7升级到3.7_centos系统升级python 2.7.3
  2. SpringMVC源码阅读系列汇总
  3. 统计字符串中单词个数
  4. aws sqs_JMS和AWS SQS的更多高级内容
  5. EBS并发管理器请求汇总(按照并发消耗时间,等待时间,平均等待事件等汇总)...
  6. 在过程中要正式批准可交付成果_干货!软考高项项目管理知识体系5大过程组47个过程...
  7. 0.typescript-相关文档
  8. Linux下的date命令
  9. 分治法-求最大最小元素
  10. PFC离散元仿真核心技术与应用
  11. 使用C++编写卷积神经网络(一)
  12. 【NOIP2011提高组】观光公交
  13. java 递归算法N的乘阶
  14. DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换及RSA(学习笔记)
  15. Python之父抛弃Python!现在学Python还有用吗?
  16. php获取当前周得周一_php获取本周一的日期实现方法
  17. GameFramework篇:StarForce资源热更新讲解(二:具体操作步骤)
  18. CORS机制及其风险
  19. Qt QLocalSocket 进程间通信
  20. 好书推荐--《态度》-吴军著

热门文章

  1. python爬取链家二手房信息
  2. 一文了解Python流程控制
  3. 数据结构和算法——用动态规划求解最短路径问题
  4. [python]数据整理,将取得的众多的沪深龙虎榜数据整一整
  5. 大学四年,因为看了这些书,我大二就拿了华为Offer
  6. PQ和HLG标准及其转换
  7. idea怎么打开war包并运行
  8. 谣传“郑州警察被壮汉秒残” 涉事者被拘10日
  9. 申请coursera助学金模板转载
  10. 2022快手前端校招一面