问题描述:

今天同事说有个zabbix监控数据库历史数据越来越多了,

让我帮忙清一下,顺便熟悉练练手,做个笔记

zabbix监控运行一段时间以后,会留下大量的历史监控数据

zabbix数据库一直在增大可能会造成系统性能下降,查看历史数据室查询速度缓慢。

zabbix里面最大的表就是history和history_uint两个表,但是我这边查看到history_log表也是最大的。

而且zabbix里面的时间是使用的时间戳方式记录,所以可以根据时间戳来删除历史数据。

解决方法:

1、首先需要关闭zabbix和httpd服务:

我的系统是centos7系统,关闭服务是这种

[root@awza ~]# systemctl stop zabbix-server.service
[root@awza ~]# systemctl stop httpd.service

2、查看数据库目录文件的大小

[root@awza zabbix]# pwd
/database/mysql/zabbix [root@awza zabbix]# ll -h |grep G
total 129G
-rw-rw---- mysql mysql .9G Nov : history.ibd
-rw-rw---- mysql mysql 121G Nov : history_log.ibd
-rw-rw---- mysql mysql .2G Nov : history_uint.ibd

生成一个Unix时间戳,例如想删除2019-05-01号之前的数据(保留19年5月1号以后的监控数据)

或者使用站长时间戳工具生成:https://tool.lu/timestamp/

[root@awza zabbix]# date +%s -d "May 1, 2019 00:00:00"

3、数据库备份(重要的话最好做一下备份)

我这边备份磁盘空间不足,说不用备份,出现了mysqldump: Got errno 28 on write就是磁盘空间不足

[root@awza ~]# /usr/bin/mysqldump -uzabbix -p --triggers --routines --events zabbix > /database/backup/zabbix-mysql-.sql
Enter password:
mysqldump: Got errno on write

4、查询历史表数据数:

[root@awza backup]# mysql -uzabbix -p
Enter password: MariaDB [(none)]> use zabbix MariaDB [zabbix]> select max(itemid) from history;
+-------------+
| max(itemid) |
+-------------+
| |
+-------------+
row in set (0.00 sec) MariaDB [zabbix]> select max(itemid) from history_uint;
+-------------+
| max(itemid) |
+-------------+
| |
+-------------+
row in set (0.00 sec) MariaDB [zabbix]> select max(itemid) from history_log;
+-------------+
| max(itemid) |
+-------------+
| |
+-------------+
row in set (0.00 sec)

5、按时间戳清理监控历史数据:

这边清理相关表按照历史表的大小来清理,根据(2、查看数据库目录文件的大小)

第一种清理方法:

use zabbix;
MariaDB [zabbix]> delete from history where clock < ;
Query OK, rows affected (41.70 sec) MariaDB [zabbix]> delete from history_uint where clock < ;
Query OK, rows affected ( min 51.22 sec) MariaDB [zabbix]> delete from history_log where clock < ;
ERROR (HY000): The total number of locks exceeds the lock table size ##注意:这边时间戳按照自己的条件写,1556640000这个是我前面按照2019--01计算出来的时间戳 这边删除第三个表的时候,因为数据量太大,导致报错:
错误1206(HY000):锁的总数超过了锁表的大小
这个表也不重要,所以就执行下面的truncate命令来清理

第二种清理方法:

truncate table history;
optimize table history;-------------------------------------------------------
truncate table history_log;
optimize table history_log;
-------------------------------------------------------
truncate table history_uint;
optimize table history_uint; 注意:这些命令会把zabbix所有的监控数据清空,操作前注意备份数据库 truncate是清空整张表,然后根据表结构重新建立,delete删除的是记录的数据没有修改表 truncate执行删除比较快,但是在事务处理安全性方面不如delete 如果我们执行truncate的表正在处理事务,这个命令退出并会产生错误信息
MariaDB [zabbix]> optimize table history;
+----------------+----------+----------+-------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+----------------+----------+----------+-------------------------------------------------------------------+
| zabbix.history | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| zabbix.history | optimize | status | OK |
+----------------+----------+----------+-------------------------------------------------------------------+
rows in set ( min 4.03 sec)

6、开启服务

[root@awza database]# systemctl start zabbix-server.service
[root@awza database]# systemctl start httpd.service

注意提示:

当你删除数据时,mysql并不会回收已删除的数据所占据的存储空间,以及索引位。

而是空在那里,而是等待新的数据来弥补这个空缺,这样就有一个缺少,如果一时半会,没有数据来填补这个空缺,那这样就太浪费资源了。

所以对于写比较频繁的表,要定期进行optimize,看实际情况而定了,所以删除了历史数据,可以使用optimize来回收存储空间。

zabbix清理监控历史mysql数据的更多相关文章

  1. zabbix的简单操作(监控客户端MySQL数据包库)

    环境准备: 192.168.175.102    zabbix服务端 192.168.175.106    zabbix客户端(监控MySQL) 命令:iptables -F        #清空防火 ...

  2. zabbix日常监控项mysql(七)

    参考文档: percona官方文档:https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html za ...

  3. zabbix之 zabbix模板监控mysql

    zabbix中默认有mysql的监控模板.默认已经在zabbix2.2及以上的版本中.模板名称:Template App MySQL.如果没有则要去zabbix官方下载 url:https://zab ...

  4. Zabbix 配置监控 & 触发器

    Zabbix 自定义监控 zabbix-agent 获取数据,然后定义,交给 zabbix-server 端 Zabbix 配置监控项 监控的内容 # 监控服务器登录用户的数量 [root@web01 ...

  5. zabbix添加监控Mysql

    起因:zabbix自带的mysql监控模板直接使用会显示“不支持的”因为key的值是通过Mysql用户查看"show global status"信息或者用mysqladmin命令 ...

  6. 带你了解zabbix如何监控mysql主从到报警触发

    本章博客我们一起来聊一聊如何监控mysql数据库主从状态? 思路梳理: 1)首先我们都知道,判断Mysql主从是否正常,是通过主从上面的SQL和IO线程都为yes状态判断(通过awk取值,grep过滤 ...

  7. Linux监控-历史细项数据回溯

    Linux监控数据回溯 网络服务监控 应用场景: lvs 后端内网端机器网络波动监控: nginx 80.443端口连接监控: mysql 连接监控 以上为抛砖引玉,根据环境安装到监控工具(open ...

  8. zabbix使用percona的mysql监控模板监控

    安装第三方插件仓库源: [root@iZ9j3yrx43sb5sZ ~]# yum install https://www.percona.com/redir/downloads/percona-re ...

  9. Zabbix Server 自带模板监控无密码MySQL数据库

    Zabbix Server 自带模板监控无密码MySQL数据库 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.安装MariaDB 1>.安装MariaDB  [root ...

随机推荐

  1. Hadoop源代码点滴-基础概念

    大数据特征:volume(数量).variety(多样性).velocity(产生的速度) 大数据特征:多.乱.快.杂 数据的来源:业务数据.日志.管理文档(OCR).互联网.物联网.外购

  2. flexible.js分析--JavaScript

    //立即执行函数 (function flexible(window, document) { // 获取的html 的根元素 var docEl = document.documentElement ...

  3. Git基础概念与Flow流程介绍

    目录 Git相关 基本概念 常见客户端 TortoiseGit Sourcetree Intellij Idea 命令行 常用命令 存储区域 命令之 add & commit &pus ...

  4. Thread线程类

    设置线程名 查看线程名是很简单的,调用Thread.currentThread().getName()即可. public class MyThreadDemo { public static voi ...

  5. IBM MQ8.0常用操作

    一.创建队列管理器 1.创建队列管理器QM1:crtmqm -q QM1 2.删除队列管理器QM1:dltmqm QM1 3.启动队列管理器QM1:strmqm QM1 4.停止队列管理器QM1:en ...

  6. Github配合Jenkins,实现vue等前端项目的自动构建与发布

    本篇文章前端项目以vue为例(其实前端工程化项目的操作方法都相同),部署在Linux系统上(centos). 之前做前端项目的部署,一直都是手动运行打包命令,打包完.再使用FTP.Xshell等这类的 ...

  7. 初探内核之《Linux内核设计与实现》笔记下

    定时器和时间管理 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要. 主要内容: 系统时间 定时器 定时器相关 ...

  8. POJ 3616Milking Time

    Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...

  9. 主动降噪(Active Noise Control)

    智能耳机 人机交互 智能声学终端 智能耳机 智能音箱 智能听力器 喇叭单体 动圈喇叭 新材料 DLC 石墨烯 陶瓷单位 吸音材料 智能芯片 阵列式麦克风 声纹传感器 演算法 降噪算法 智能听力保护 A ...

  10. java零碎知识(每种数据类型默认值,多大,取值范围)

    只要记下字节就好了 其它不必死记,取值范围:没有正负的,2的 字节数*8次方-1  , 凡是有正负的2的 (字节数*8)-1次方 -1 比如: 1.byte(有正负):先计算是2的几次方:字节数1*( ...