实战Zabbix-Server数据库MySQL的libdata1文件过大

原文出自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%。可见其成效


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RadioButtonList Enabled=false 文字背景

RadioButtonList有个属性RepeatLayout"Flow"&#xff0c;可以防止控件与前面的文本换行&#xff0c;但是&#xff0c;使用这个属性之后&#xff0c;有个奇怪的问题&#xff0c;RadioButtonList 在Enabledfalse时&#xff0c;文字成灰色&#xff0c;在打印时&#xff…

我的LAMP源码编译安装linux+Apache+mysql+php

httpd-2.2.17.tar.gz mysql-5.1.51.tar.gz php-5.2.17.tar.gz mysql的安装 #安装需要的库 yum -y install ncurses ncurses-devel #创建MySQL用户及用户组 groupadd mysql useradd -g mysql -s /sbin/nologin mysql cp /home/root/mysql-5.1.41.tar.gz /usr/local/src c…

编译php,ldap问题

今天在ubunte上安装php&#xff0c;ldap模块一直报错&#xff1a; configure: error: Cannot find ldap libraries in /usr/lib. 网上都说解决方法&#xff1a; cp -frp /usr/lib64/libldap* /usr/lib/ 结果我的/usr目录下 根本就没有lib64 还是找找libldap.so在哪吧 执行&…

mysql 5.7.13 安装配置方法图文教程(linux)

原文出自&#xff1a;http://www.jb51.net/article/87160.htm 1系统约定 安装文件下载目录&#xff1a;/data/software Mysql目录安装位置&#xff1a;/usr/local/mysql 数据库保存位置&#xff1a;/data/mysql 日志保存位置&#xff1a;/data/log/mysql 2下载mysql 在官网&am…

hasOwnProperty和isPrototypeOf

hasOwnProperty和isPrototypeOf hasOwnProperty&#xff1a;是用来判断一个对象是否有你给出名称的属性或对象,此方法无法检查该对象的原型链中是否具有该属性&#xff0c;该属性必须是对象本身的一个成员。 isPrototypeOf是用来判断要检查其原型链的对象是否存在于指定对象实…

linux下防火墙加白名单

在linux系统中安装yum install iptables-services 然后 vi /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Sun Aug 28 12:14:02 2016*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-N whitelist-A whitelist -s 8.8.8.8 -j ACCEPT-…

Linux LVM硬盘管理及LVM扩容

原文出自http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html 一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写&#xff0c;它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合&#xff0c;相当于一个大硬盘来使用&…

android系统框架()

Android系统框架介绍: 1.大体框架: -src目录: 主要是完成java代码的编写 -assets目录: 资源目录 -res目录: 存储图片,布局文件和字符串,菜单等文件 -bin目录: 输出文件夹,如生成的APK文件 -project.properties: 工程属性文件配置 -gen目录: 系统自动生成的源代码目录 R.java默认…

zabbix服务端远程执行命令

执行一些命令或者脚本就行了。 但zabbix远程执行命令需要客户端的zabbix用户要有sudo权限&#xff0c;zabbix的客户端要改的地方是配置文件里 EnableRomoteCommands1 然后要更改的是visudo里的给zabbix用户赋予权限 zabbix ALLNOPASSWD:ALL 然后把defaults requiretty注释掉。…

Keil 文本对不上格

初次使用keil3&#xff0c;光标总是定位不准&#xff0c;修改十分麻烦&#xff0c;google后解决问题&#xff0c;修改tools.ini如下(蓝色为加入项)&#xff1a;NAME"YGLenovo User", "a"EMAIL"a"ANSI1BOOK0"UV3\RELEASE_NOTES.HTM" (&…

Linux(CentOS6.5)下编译安装Nginx1.10.1

原文出自&#xff1a;http://www.cnblogs.com/comexchan/p/5815753.html Linux(CentOS6.5)下编译安装Nginx1.10.1 首先在特权账号&#xff08;root&#xff09;下安装编译时依赖项&#xff1a; yum install gcc gcc-c perl -y 首先以非特权账号&#xff08;本文以账号comex为例…

Java volatile关键字

Java 语言中的volatile变量可以被看作是一种“程度较轻的synchronized”&#xff0c;与synchronized相比&#xff0c;volatile变量所需的编码较少&#xff0c;并且运行时开销也较少&#xff0c;但是它所能实现的功能也仅是synchronized的一部分。本文介绍了几种有效使用volatil…

Zabbix 3.0 基础介绍 [一]

原文出自 http://www.abcdocker.com/abcdocker/1402 Zabbix 3.0 基础介绍 [上] zabbix 一、Zabbix介绍 zabbix 简介 Zabbix 是一个高度集成的网络监控解决方案&#xff0c;可以提供企业级的开源分布式监控解决方案&#xff0c;由一个国外的团队持续维护更新&#xff0c;软件可以…

DOM 节点的创建、删除、替换

只要在屏幕上托三个button按钮就可以了&#xff0c;下面就是程序运行时的界面&#xff1a; <head> <title></title> <script type"text/javascript"> function CreateNode() { var pnode document.createElement(p…

Zabbix 3.0 部署监控 [二]

原文出自 http://www.abcdocker.com/abcdocker/1453 Zabbix 3.0 部署监控 [二] zabbix 一、添加监控主机及设置 1.创建主机 Agent可以干一些SNMP无法干的事情&#xff0c;例如自定义监控项 snmp相关文章&#xff1a;http://www.abcdocker.com/abcdocker/1376 这里我们先不着…

oracle 一些基本概念

数据库就是一个相片底片 实例就是相纸 一个底片可以冲多个相纸&#xff0c;但一张相纸最多冲一个底片。 数据库可以由多个实例装载和打开&#xff0c;而实例可以在任何时间点装载和打开一个数据库。实际上&#xff0c;准确地讲&#xff0c;实例在其整个生存期中最多能装载和打开…

【leetcode】Integer to Roman

最近使用开发的过程中出现了一个小问题&#xff0c;顺便记录一下原因和方法-- Question &#xff1a; Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. Anwser 1 &#xff1a; class Solution { public:st…

MySQL必会企业面试题

本文转载 老男孩教育原文&#xff1a;http://user.qzone.qq.com/49000448/blog/1427333863 1.登陆数据库 (1)单实例 mysql -uroot -poldboy (2)多实例 mysql -uroot -poldboy -S /data/3306/mysql.sock 2.查看数据库版本及当前登录用户是什么 mysql> select version(); 查看…

关于ORACLE的GUID主键生成

转自http://blog.sina.com.cn/s/blog_53d3c24a0100mplc.html项目中若采用oracle数据库&#xff0c;则主键生成可以有两种方式&#xff0c;一是用sys_guid(),二是定义一个sequence&#xff0c;然后用nextval得到ID。Oracle的定义sequence例子&#xff1a;create sequence seq_te…

MySQL binlog三种模式

原文出自 http://www.abcdocker.com/abcdocker/213 MySQ binlog三种模式及设置方法 1.1 Row Level 行模式 日志中会记录每一行数据被修改的形式&#xff0c;然后在slave端再对相同的数据进行修改优点&#xff1a;在row level模式下&#xff0c;bin-log中可以不记录执行的sql…