原文出自http://www.linuxidc.com/Linux/2014-12/110353.htm

zabbix自动清理30天前的数据

zabbix属于一个细度化的监控工具,其入库数据随着细度的增加相应的入库数据量也会较大,当数据量到一定时候的时候其反映速度会比较慢,尽管其监控服务在配置时可以指定数据的保存周期, 但是了解下通过直接操作数据库进行数据删除还是有必要的。

通过数据库进行删除的脚本如下:

  1. #!/bin/bash
  2. User="root"
  3. Passwd="361way"
  4. Date=`date -d $(date -d "-30 day" +%Y%m%d) +%s` #取30天之前的时间戳
  5. $(which mysql) -u${User} -p${Passwd} -e "
  6. use zabbix;
  7. DELETE FROM history WHERE 'clock' < $Date;
  8. optimize table history;
  9. DELETE FROM history_str WHERE 'clock' < $Date;
  10. optimize table history_str;
  11. DELETE FROM history_uint WHERE 'clock' < $Date;
  12. optimize table history_uint;
  13. DELETE FROM trends WHERE 'clock' < $Date;
  14. optimize table trends;
  15. DELETE FROM trends_uint WHERE 'clock' < $Date;
  16. optimize table trends_uint;
  17. DELETE FROM events WHERE 'clock' < $Date;
  18. optimize table events;
  19. "

注:其中histroy是详细的历史数据,trends是图表趋势数据。一般情况下,根据我的自定义,会将histroy数据保留7天,trend数据保留365天。

今天我们的zabbix-server机器根空间不够了,我一步步排查结果发现是/var/lib/mysql/下的libdata1文件过大,已经达到了41G。我立即想到了zabbix的数据库原因,随后百度、谷歌才知道zabbix的数据库他的表模式是共享表空间模式,随着数据增长,ibdata1 越来越大,性能方面会有影响,而且innodb把数据和索引都放在ibdata1下。

共享表空间模式:

InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。

独立表空间模式:

优点: 
1.每个表都有自已独立的表空间。 
2.每个表的数据和索引都会存在自已的表空间中。 
3.可以实现单表在不同的数据库中移动。 
4.空间可以回收(drop/truncate table方式操作表空间不能自动回收) 
5.对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。 
缺点: 
单表增加比共享空间方式更大。

结论: 
共享表空间在Insert操作上有一些优势,但在其它都没独立表空间表现好,所以我们要改成独立表空间。 
当启用独立表空间时,请合理调整一下 innodb_open_files 参数。

下面我们来讲下如何讲zabbix数据库修改成独立表空间模式

1.查看文件大小

[root@localhost ~]#cd /var/lib/mysql

[root@localhost ~]#ls -lh

-rw-rw---- 1 mysql mysql 41G Nov 24 13:31 ibdata1

-rw-rw---- 1 mysql mysql 5.0M Nov 24 13:31 ib_logfile0

-rw-rw---- 1 mysql mysql 5.0M Nov 24 13:31 ib_logfile1

drwx------ 2 mysql mysql 1.8M Nov 24 13:31 zabbix

大家可以看到这是没修改之前的共享表数据空间文件ibdata1大小已经达到了41G

2.清除zabbix数据库历史数据

1)查看哪些表的历史数据比较多

[root@localhost ~]#mysql -uroot -p

mysql > select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema='zabbix';

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

| table_name            | total_mb      | table_rows |

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

| acknowledges          |    0.06250000 |          0 |

....

| help_items            |    0.04687500 |        103 |

| history              | 1020.00000000 |  123981681 |

| history_log          |    0.04687500 |          0 |

...

| history_text          |    0.04687500 |          0 |

| history_uint          | 3400.98437500 |  34000562 |

| history_uint_sync    |    0.04687500 |          0 |

可以看到history和history_uint这两个表的历史数据最多。

另外就是trends,trends_uint中也存在一些数据。

由于数据量太大,按照普通的方式delete数据的话基本上不太可能。

所以决定直接采用truncate table的方式来快速清空这些表的数据,再使用mysqldump导出数据,删除共享表空间数据文件,重新导入数据。

2)停止相关服务,避免写入数据

[root@localhost ~]#/etc/init.d/zabbix_server stop

[root@localhost ~]#/etc/init.d/httpd stop

3)清空历史数据

[root@localhost ~]#mysql -uroot -p

mysql > use zabbix;

Database changed

mysql > truncate table history;

Query OK, 123981681 rows affected (0.23 sec)

mysql > optimize table history;

1 row in set (0.02 sec)

mysql > truncate table history_uint;

Query OK, 57990562 rows affected (0.12 sec)

mysql > optimize table history_uint;

1 row in set (0.03 sec)

3.备份数据库由于我/下的空间不足所以我挂载了一个NFS过来

[root@localhost ~]#mysqldump -uroot -p zabbix > /data/zabbix.sql

4.停止数据库并删除共享表空间数据文件

1)停止数据库

[root@localhost ~]#/etc/init.d/mysqld stop

2)删除共享表空间数据文件

[root@localhost ~]#cd /var/lib/mysql

[root@localhost ~]#rm -rf ib*

5.增加innodb_file_per_table参数

[root@localhost ~]#vi /etc/my.cnf

在[mysqld]下设置

innodb_file_per_table=1

6.启动mysql

[root@localhost ~]#/etc/init.d/mysqld start

7.查看innodb_file_per_table参数是否生效

[root@localhost ~]#mysql -uroot -p

mysql> show variables like '%per_table%';

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

| Variable_name | Value |

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

| innodb_file_per_table | ON |

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

1 row in set (0.00 sec)

8.重新导入数据库

[root@localhost ~]#mysqldump -uroot -p zabbix < /data/zabbix.sql

9.最后,恢复相关服务进程

[root@localhost ~]#/etc/init.d/zabbix_server start

[root@localhost ~]#/etc/init.d/httpd start

恢复完服务之后,查看/分区的容量就下去了,之前是99%,处理完之后变成了12%。可见其成效

实战Zabbix-Server数据库MySQL的libdata1文件过大相关推荐

  1. SQL server数据库无法附加MDF文件

    标题SQL server数据库无法附加MDF文件 我们来看看这种情况怎么解决,如图所示: 解决步骤: 1.找到数据库分离出去的文件(.mdf和.ldf文件). 2.右击文件打开属性,点击安全选项,点击 ...

  2. mysql导入sql文件过大或连接超时的解决办法

    原文:mysql导入sql文件过大或连接超时的解决办法 前段时间出差在现场开发的时候,导入数据库老是出问题.最后发现了一个神奇sql语句交给实施,只要导入出错就把如下语句执行就可以了.至今屡试不爽. ...

  3. mysql转储导入错误_数据库MYSQL导入SQL文件时错误的解决方法(2种)

    从服务器数据库用navicate导出的.sql文件后再用navicate导入到本地的数据库中会出现若干条记录的错误: [Err] 1064 – You have an error in your SQ ...

  4. mysql导入sql文件过大或连接超时的解决的方法

    前段时间出差在现场开发的时候,导入数据库老是出问题.最后发现了一个奇妙sql语句交给实施,仅仅要导入出错就把例如以下语句运行就能够了.至今屡试不爽. set global max_allowed_pa ...

  5. 《Python3 网络爬虫开发实战》:关系型数据库 MySQL 存储

    关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录.表可以看作某个实体的集合,而实体之间存在联系,这就需要表与表之 ...

  6. mysql 与 xls 连接_数据库MySQL与xls文件的互导

    最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到xls表中,在网上搜了很多资料,经过多次尝试终于实现了功能,废话不多说,在这粘贴出代码,希望可以帮到需要的朋友. 一.将. ...

  7. mysql数据库重做日志文件_数据库:mysql:重做日志文件(redo log file)

    一.重做日志缓冲(redo log buffer) 1. log block 在InnoDB存储引擎中,重做日志都是以512字节进行存储的.这意味着重做日志缓存.重做日志文件都是以块(block)的方 ...

  8. sql server 数据库正在使用该文件的解决办法

    今天在帮朋友还原数据库时遇到了一个问题.朋友用的是sql server 2008数据库,本身有一个数据库,他在修改程序的时候,想修改数据库的内容.但是又不想在原数据库中修改.想备份还原出一个数据库然后 ...

  9. SQL Server数据库关于bak类型文件的备份与还原

    注:本文只做最简单流程描述,欢迎留言补充.谢谢 Thanks♪(・ω・)ノ 涉及工具软:SQL Server Management Studio 并且假装已经连接到相关数据库. 一.数据备份 1.右键 ...

最新文章

  1. DT时代下[个推3.0]遵循的四个法则
  2. Ubuntu安装Rstudio
  3. tmux centos 6.3
  4. Python argparse
  5. mysql切换到使用openssl,MySQL主从复制+OpenSSL
  6. Xvid编码器流程(基于xvid1.1.0)
  7. 光耀卡服务器维修,3月28日服务器更新维护公告
  8. hive分区用2个字段有何限制_[特性]Hive动态分区功能使用
  9. android 悬浮窗 输入框_利用DecorView实现悬浮窗的效果
  10. ArcMAP获取要素的外包多边形
  11. python pytest 前置后置
  12. Linux查看硬件信息命令大全
  13. java GC垃圾回收
  14. 选中一行的快捷键_常用文字编辑快捷键,学会之后,天天可以提前下班
  15. BZOJ3876 [Ahoi2014Jsoi2014]支线剧情 【有上下界费用流】
  16. java泛型为类类型_Java泛型:仅定义为返回类型的通用类型
  17. jboss7 应用详解_【扔掉说明书114】本田 思域 2020款 舒适与娱乐功能详解
  18. python qt快速入门_Python QT5 简洁入门
  19. BJFUOJ 1429
  20. 计算机语言中double是什么意思,C语言中double是什么意思?_后端开发

热门文章

  1. 车仪表台上的装饰_一汽大众销量最差的车,旅行车蔚领为什么在国内没有市场?...
  2. python单元测试框架unittest介绍和使用_Python单元测试框架unittest简明使用实例
  3. passive模式 tcp_FTP主动模式和被动模式的比较
  4. 服务器bios修改uefi,服务器 uefi bios设置
  5. mysql 索引合并_MySQL 索引合并(Index Merge)优化
  6. Python测试开发django4.templates模板配置
  7. JAVA学习笔记_五JAVA开发中的WEB前端技术
  8. PyCherm的常用快捷键总结
  9. 深入理解L1、L2正则化
  10. MVC 模式和模型 2