#######################sample

【OIP - 互联网开放平台】在2019-07-28 21:30:11发生10.194.42.19 - - Linux上的监控项【磁盘空间】【Free disk space on /db/mysql】产生了异常: 【严重】: 空闲磁盘空间低于10%, /db/mysql. 当前值: 9.6740 【珠海华润银行】

原因:

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

1.mysql -uroot --socket=/db/mysql/data/mysqltmp/mysql.sock -p

Enter password:

mysql> show processlist

-> ;

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

| Id  | User        | Host      | db   | Command | Time     | State                                                                       | Info             |

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

|   2 | system user |           | NULL | Connect | 24025479 | Waiting for master to send event                                            | NULL             |

3 rows in set (0.00 sec)

2. mysql慢查询日志

mysql> show variables like '%slow%';

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

| Variable_name             | Value                                    |

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

| log_slow_admin_statements | OFF                                      |

| log_slow_slave_statements | OFF                                      |

| slow_launch_time          | 2                                        |

| slow_query_log            | ON                                       |

| slow_query_log_file       | /db/mysql/data/mydata/mysql-slow.log |

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

mysql> show variables like '%long%';

| long_query_time                                        | 2.000000 |

慢查询时间为2s,

3.配置如下:

mysql> show variables like 'default_storage_engine';

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

| Variable_name          | Value  |

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

| default_storage_engine | InnoDB |

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

1 row in set (0.00 sec)

mysql> show variables like 'transaction_isolation';

Empty set (0.00 sec)

mysql> show variables like 'binlog_format';

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

| Variable_name | Value |

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

| binlog_format | MIXED |

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

1 row in set (0.00 sec)

mysql> show variables like 'binlog_cache_size';

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

| Variable_name     | Value   |

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

| binlog_cache_size | 2097152 |

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

1 row in set (0.00 sec)

mysql> show variables like 'max_binlog_cache_size';

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

| Variable_name         | Value                |

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

| max_binlog_cache_size | 18446744073709547520 |

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

1 row in set (0.00 sec)

mysql> show variables like 'tmpdir';

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

| Variable_name | Value                         |

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

| tmpdir        | /db/mysql/data/mydata/tmp |

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

1 row in set (0.00 sec)

mysql> show variables like 'transaction_isolation';

Empty set (0.00 sec)

4.查看数据库容量

mysql> select

-> table_schema as 'db',

-> sum(table_rows) as 'count',

-> sum(truncate(data_length/1024/1024, 2)) as 'data(MB)',

-> sum(truncate(index_length/1024/1024, 2)) as 'index(MB)'

-> from information_schema.tables

-> group by table_schema

-> order by sum(data_length) desc, sum(index_length) desc;

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

| db                 | count    | data(MB) | index(MB) |

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

| openapi            | 21915376 | 11710.97 |   1216.19 |

| mysql              |     2697 |     0.76 |      0.06 |

| information_schema |     NULL |     0.00 |      0.00 |

| performance_schema |    74026 |     0.00 |      0.00 |

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

4 rows in set (1.28 sec)

mysql> select

-> table_schema as 'db',

-> table_name as 'table',

-> table_rows as 'count',

-> truncate(data_length/1024/1024, 2) as 'data(MB)',

-> truncate(index_length/1024/1024, 2) as 'index(MB)'

-> from information_schema.tables

-> order by data_length desc, index_length desc;

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

| db                 | table                                              | count   | data(MB) | index(MB) |

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

| openapi            | log_r_esb                                          | 5312774 |  1957.00 |      0.00 |

| openapi            | api_log_sys_0                                      | 2886067 |  1727.39 |    218.74 |

| openapi            | api_log_sys_6                                      | 2795942 |  1673.90 |    217.91 |

| openapi            | api_log_sys_5                                      | 2205103 |  1319.96 |    165.51 |

| openapi            | api_log_sys_2                                      | 2114416 |  1264.59 |    163.54 |

| openapi            | api_log_sys_3                                      | 2017041 |  1206.44 |    156.33 |

| openapi            | api_log_sys_4                                      | 1910052 |  1142.62 |    143.61 |

| openapi            | api_log_sys_1                                      | 1825220 |  1091.11 |    141.35 |

6.查看文件系统目录大小

[root@poipredis03 openapi]# du -s * |sort -nr

5971972 log_r_esb.ibd

1768856 api_log_sys_0.MYD

1714084 api_log_sys_6.MYD

1351648 api_log_sys_5.MYD

1294952 api_log_sys_2.MYD

1235412 api_log_sys_3.MYD

1179140 api_log_sys_1.MYD

1170056 api_log_sys_4.MYD

7.查看大表的engine

mysql> select table_catalog

->      ,table_schema

->     ,table_name

->    ,engine

->    from information_schema.tables

->    where table_schema='openapi' and table_name='log_r_esb';

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

| table_catalog | table_schema | table_name | engine |

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

| def           | openapi      | log_r_esb  | InnoDB |

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

1 row in set (0.27 sec)

可能是因为表碎片,删除了数据,OS文件并不会收缩,但是表的大小是会变小的。所以就造成了OS文件里有了碎片化空间。

解决思路:

1.建议找操作系统人员扩容该目录/db/mysql

 

##########################

MySQL查看数据库表容量大小

https://cloud.tencent.com/info/429e1f0cadbc960659e7a43232450ae0.html

【https://blog.csdn.net/fdipzone/article/details/80144166】

1.查看所有数据库容量大小

1
2
3
4
5
6
7
8
select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
group by table_schema
order by sum(data_length) desc, sum(index_length) desc;

  

2.查看所有数据库各表容量大小

1
2
3
4
5
6
7
8
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
order by data_length desc, index_length desc;

  

3.查看指定数据库容量大小

例:查看mysql库容量大小

1
2
3
4
5
6
7
select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql';

  

4.查看指定数据库各表容量大小

例:查看mysql库各表容量大小

1
2
3
4
5
6
7
8
9
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql'
order by data_length desc, index_length desc;

查询整个MySQL实例里面存储引擎为MyISAM的表

select table_catalog
      ,table_schema
      ,table_name
      ,engine
from information_schema.tables
where engine='MyISAM';

查询MyDB数据库里面存储引擎为MyISAM的表

select table_catalog
      ,table_schema
      ,table_name
      ,engine
from information_schema.tables
where table_schema='MyDB' and engine='MyISAM';

###########################

http://blog.chinaunix.net/uid-16728139-id-3495657.html

分类: Mysql/postgreSQL

2013-02-22 14:48:20

案例分享-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监控,故障恢复.

https://www.2cto.com/database/201303/192747.html

######### binglog 太大,导致磁盘空间太满了。

mysql开启BINGLOG后日志文件增长比较快,很快占满磁盘空间。

mysql开启BINGLOG后日志文件增长比较快,很快占满磁盘空间。

cd  /mysql/data/mydata

ls -ltr

-rw-rw---- 1 mysql mysql 1073742040 Jul 21 20:20 mysql-bin.000036
-rw-rw---- 1 mysql mysql 1073741977 Jul 23 21:33 mysql-bin.000037
-rw-rw---- 1 mysql mysql 1073742172 Jul 26 12:45 mysql-bin.000038
-rw-rw---- 1 mysql mysql 1073742485 Jul 28 10:45 mysql-bin.000039

通过以下几种方式删除日志文件:
一、设置日志保留时长expire_logs_days自动删除
查看当前日志保存天数:

show variables like '%expire_logs_days%';

这个默认是0,也就是logs不过期,可通过设置全局的参数,使他临时生效:

set global expire_logs_days=7;

设置了只保留7天BINLOG, 下次重启mysql这个参数默认会失败,所以需在my.cnf中设置

expire_logs_days = 7

二、手动删除BINLOG (purge binary logs)
用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件

PURGE {MASTER | BINARY} LOGS TO ‘log_name’
 PURGE {MASTER | BINARY} LOGS BEFORE ‘date’

例如:

PURGE MASTER LOGS TO ‘mysql-bin.010′;
PURGE MASTER LOGS BEFORE ‘2008-06-22 13:00:00′;
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 D

生产上有一个比较小的系统,发现mysql占用空间较大,经排查发现是binlog比较多引起的

查看binlog过期时间,设置的时间为90天,这个值默认是0天,也就是说不自动清理,可以根据生产情况修改,本例修改为7天

  1. mysql> show variables like 'expire_logs_days';
  2. +------------------+-------+
  3. | Variable_name | Value |
  4. +------------------+-------+
  5. | expire_logs_days | 90 |
  6. +------------------+-------+
  7. 1 row in set (0.00 sec)
  1. mysql> set global expire_logs_days=7;
  2. Query OK, 0 rows affected (0.00 sec)

设置之后不会立即清除,触发条件是:

binlog大小超过max_binlog_size
手动执行flush logs
重新启动时(MySQL将会new一个新文件用于记录binlog)

我们执行flush logs;

  1. mysql> flush logs;
  2. Query OK, 0 rows affected, 64 warnings (0.16 sec

如果binlog非常多,不要轻易设置改参数,有可能导致io争用,这时候可以使用purge命令予以清除:

 

将bin.000055之前的binlog清掉:

  1. mysql>purge binary logs to 'bin.000055';

将指定时间之前的binlog清掉:

 
  1. mysql>purge binary logs before '2017-05-01 13:09:51';

mysql 日志自动切换

感谢ATCO

有三种解决方法:1.关闭mysql主从,关闭binlog;2.开启mysql主从,设置expire_logs_days;3.手动清除binlog文件,> PURGE MASTER LOGS TO ‘MySQL-bin.010′;

实现:
1.关闭mysql主从,关闭binlog

# vim /etc/my.cnf  //注释掉log-bin,binlog_format
# Replication Master Server (default)
# binary logging is required for replication
# log-bin=mysql-bin
# binary logging format - mixed recommended
# binlog_format=mixed

然后重启数据库

2.重启mysql,开启mysql主从,设置expire_logs_days

# vim /etc/my.cnf  //修改expire_logs_days,x是自动删除的天数,一般将x设置为短点,如10
expire_logs_days = x //二进制日志自动删除的天数。默认值为0,表示“没有自动删除”

此方法需要重启mysql,附录有关于expire_logs_days的英文说明

当然也可以不重启mysql,开启mysql主从,直接在mysql里设置expire_logs_days

> show binary logs;
> show variables like '%log%';
> set global expire_logs_days = 10;

3.手动清除binlog文件

# /usr/local/mysql/bin/mysql -u root -p
> PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY); //删除10天前的MySQL binlog日志,附录2有关于PURGE MASTER LOGS手动删除用法及示例
> show master logs;

也可以重置master,删除所有binlog文件:

# /usr/local/mysql/bin/mysql -u root -p
> reset master; //附录3有清除binlog时,对从mysql的影响说明

附录:
1.expire_logs_days英文说明
Where X is the number of days you’d like to keep them around. I would recommend 10, but this depends on how busy your MySQL server is and how fast these log files grow. Just make sure it is longer than the slowest slave takes to replicate the data from your master.
Just a side note: You know that you should do this anyway, but make sure you back up your mysql database. The binary log can be used to recover the database in certain situations; so having a backup ensures that if your database server does crash, you will be able to recover the data.

2.PURGE MASTER LOGS手动删除用法及示例,MASTER和BINARY是同义词

> PURGE {MASTER | BINARY} LOGS TO 'log_name'
> PURGE {MASTER | BINARY} LOGS BEFORE 'date'

删除指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除MySQL BIN-LOG 日志,这样被给定的日志成为第一个。

实例:

> PURGE MASTER LOGS TO 'MySQL-bin.010';  //清除MySQL-bin.010日志
> PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00'; //清除2008-06-22 13:00:00前binlog日志
> PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY); //清除3天前binlog日志BEFORE,变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。

3.清除binlog时,对从mysql的影响
如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

 

转 mysql 文件系统空间满了的更多相关文章

  1. 磁盘空间满了之后MySQL会怎样

    大多数用户在对于磁盘进行分区的时候都是习惯性的不给系统盘预留很大空间,其实这并不是一个好习惯.因为系统分区并不像我们想象的那样会仅仅安装一个操作系统,系统分区多数还是会承载操作系统主要应用软件安装任务 ...

  2. ngnix 502 bad gateway 的解决办法之空间满了

    网站一直运行都很正常,但某天登录后台却出现502 bad gateway,上网搜索都是一大堆解决办法,没可操作性.网站难道出现安全问题?这个应该很少概率.最后排查发现空间满了. 使用命令:df -hl ...

  3. ORA-19502: write error on file "", blockno (blocksize=)/linux下磁盘空间满了解决办法--Virtualbox

    今天,在测试环境启动数据库时,报错: SQL> startup; ORACLE instance started. Total System Global Area  285212672 byt ...

  4. MySQL表空间集

    --MySQL表空间集 ----------------------2014-09-20 1. 收缩ibdata的方法,目前MySQL依然没有提供收缩ibdata的方法,只能重构,下面是5.7的步骤. ...

  5. docker容器存放目录磁盘空间满了,转移数据修改Docker默认存储位置

    原文:docker容器存放目录磁盘空间满了,转移数据修改Docker默认存储位置 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_3767485 ...

  6. linux磁盘空间满了 但是没有大文件

    很常见的一个问题 linux磁盘空间满了 但是没有大文件 解决思路: 1.用df 检查发现/根目录可用空间为0 [root@/]#df -h 2.用du检查发现各目录占用的空间都很少,有约3G的空间莫 ...

  7. oracle服务器硬盘磁盘空间满了

    问题描述:oracle服务器硬盘磁盘空间满了,没有空间写入数据: 解决思路: a.服务器是虚拟机还是实体机? 虚拟机,->物理机上有空间直接给它扩容,再给数据库的相关表空间添加文件就可: 实体机 ...

  8. mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections

    mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections 第一种处理方式: ./mysql -u root -p 登录成功后执行以下语句查询当前的 ...

  9. 归档空间满了 导致Imp卡住

    今天在使用exp imp将生产环境数据库导入到测试环境的过程中,imp的时候 发现在导入某张表的时候卡住了. 起初是以为该表比较大的缘故,后来过了很久 发现还是卡在那里. 最后分析原因 发现设置的归档 ...

随机推荐

  1. 行为型模式(四) 观察者模式(Observer)

    一.动机(Motivate) "观察者模式"在现实生活中,实例其实是很多的,比如:八九十年代我们订阅的报纸,我们会定期收到报纸,因为我们订阅了.银行可以给储户发手机短信,也是&qu ...

  2. VS Code中配置Markdown

    其实,对我来说是反过来的,我是为了使用Markdown而安装VS Code(虽然久仰大名) 安装VS Code 安装Markdown插件 使用篇 1. 安装vscode 之所以啰嗦一下,是因为据说安装 ...

  3. Linux 下查看内存使用情况方法总结

    Linux查看CPU和内存使用情况:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在做Linux系统优化的时候,物理内 ...

  4. 【EF】vs2017中没有EF模型

    在添加->新建项目 中找不到实体模型? 或者 在vs中打开edmx文件时,显示的只有文本,没有图形模式 原因:是因为没有安装实体模型插件 解决方法: 1.打开网址 https://marketp ...

  5. linux ftp启用和停用及vsftpd安装 ssh 启用和停用命令及ssh的安装

    1.首页要用ftp:服务器上必须安装vsftpd 安装命令 yum installed vsftpd 查看vsftpd是否启动 root@DK:/home/daokr# service vsftpd ...

  6. SDOI R2 咕咕记

    Day 0 路上堵车,\(5\)点才到宾馆 \(BCT\)为什么在山上啊!!!! 试机的时候敲了一下多项式求逆的板子 回到宾馆订了\(KFC\)的外卖 Day 1 爬山的时候跟\(asuldb\)说 ...

  7. 洛谷 P1147 连续自然数和 题解

    P1147 连续自然数和 题目描述 对一个给定的自然数MM,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为MM. 例子:1998+1999+2000+2001+2002 = 100001 ...

  8. P2258 子矩阵——搜索+dp

    P2258 子矩阵 二进制枚举套二进制枚举能过多一半的点: 我们只需要优化一下第二个二进制枚举的部分: 首先我们先枚举选哪几行,再预处理我们需要的差值,上下,左右: sum_shang,sum_hen ...

  9. 23种C#设计模式,源码在GitHub ( 具体代码 , 优缺点 , 相关网址) 希望对大家有所帮助

    点击 进入Github 地址

  10. Java 学习之路(2)程序基本要素

    编写一个程序,基本要素包括:标识符.关键字.注释.修饰符.块.语句.类和main()方法. 标识符 概念 在Java语言中:标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 标识符组成 ...