zabbix优化记一次惨痛的zabbix数据库优化

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

最近负责公司的zabbix项目,由于前期缺少整体性能架构的规划,导致后期出一系列的问题,玩zabbix的兄弟都知道,zabbix最大的瓶颈本身不在zabbix服务,而在mysql数据库的压力上,因此,优化zabbix其实就是优化zabbix的配置以及zabbix的mysql了;

Zabbix 数据库常见的优化处理方法有两种:

01. 优化数据库,对数据库进行分表处理;

02. 清空数据库中的history, history_uint表;

在接下来的方案我们就mysql数据库分表来进行优化;

具体思路:

1. 首先下载脚本

https://github.com/itnihao/zabbixdbpartitioning

感谢hao哥提供脚本以及帮助。

2. 前期准备工作,安全起见最好安装screen,也不怕程序卡死,关于screen的用法请参考http://www.kwx.gd/CentOSApp/CentOS-screen.html

关闭zabbix的邮件报警,也可以关闭zabbix server服务,mysql本身会锁表

3. 在screen模式下运行脚本,

在这里需要注意的是,如果你的数据库特别大,最好先备份,然后在修改脚本,然后分表,在修改脚本的时候需要注意的几个地方我这里先列出来下,如下:

首先修改zabbix 数据库和密码 默认情况下是都是zabbix 如果你的也是这样的话,那么不用修改,

然后修改配置文件的路径,根据自己的自定义的路径来修改脚本的路径

如果手动备份了那么关闭脚本中备份.

4. 然后来查看是否创建完成;

具体实施:

1. 首先在安装部署之前,来查看两张图片,然后我们就知道压力怎么样了,

clip_image002

clip_image003

2. 切记记得备份,关于备份就不在这里列出来了,使用mysqldump来完成备份.关闭zabbix服务器;

完整导出数据库备份,

1
2
3
4
5
mysqldump -uroot -p zabbix >  /www/zabbix .sql
导出数据库结构不导出数据:
mysqldump --opt -d zabbix -uroot -p > zabbix.biao.sql
关闭zabbix服务:
/etc/rc .d /init .d /zabbix-server  stop

3. 执行脚本,在执行脚本之前,我们先创建两张表, history_bak和history_uint_bak,然后我们重命名原来的两张表history和history_uint两张表;然后把创建的两张表变成原来的,这样表中就没有数据了.如下:

创建表:关于创建,可以到处zabbix数据库的表结构,然后找到这个表就可以,还好这两张表没有依赖关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `history_bak` (
`itemid` bigint(20) unsigned NOT NULL,
`clock` int(11) NOT NULL DEFAULT  '0' ,
`value` double(16,4) NOT NULL DEFAULT  '0.0000' ,
`ns` int(11) NOT NULL DEFAULT  '0' ,
KEY `history_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `history_uint_bak` (
`itemid` bigint(20) unsigned NOT NULL,
`clock` int(11) NOT NULL DEFAULT  '0' ,
`value` bigint(20) unsigned NOT NULL DEFAULT  '0' ,
`ns` int(11) NOT NULL DEFAULT  '0' ,
KEY `history_uint_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

重命名表:

1
2
3
4
rename table  history  to history_bak_14_03_08;
rename table history_bak to  history ;
rename table history_uint to history_uint_bak_14_03_08;
rename table history_uint_bak to history_uint;

4. 然后来执行脚本;

bash -x partitiontables.sh,可以根据提示来选择Y/N

因为我是代bug模式输出的脚本,输出比较多,我在这里截几张重要的图片,大家已做参考:

clip_image005

clip_image006

clip_image008

5. 完成之后我们可以查看数据是否来看有没有成功

clip_image010

生成的任务计划脚本路径:

1
cat  /etc/cron .daily /zabbixhousekeeping

记得要在脚本中配置邮件,因为在我们的案例中我们使用的是mutt+msmtp 脚本如下:

1
2
3
4
5
6
7
8
9
[root@zabbix-server-01 ~] # cat /usr/local/zabbix/cron.d/housekeeping.sh
#!/bin/bash
MAILTO=431054426@qq.com
tmpfile= /tmp/housekeeping $$
date  >$tmpfile
/usr/bin/mysql  --skip-column-names -B -h localhost -u zabbix -pzabbix zabbix -e  "CALL create_zabbix_partitions();"  >>$tmpfile 2>&1
/usr/bin/mutt  -s  "Zabbix MySql Partition Housekeeping"  $MAILTO <$tmpfile
rm  -f $tmpfile
[root@zabbix-server-01 ~] #

然后会收到报警邮件

clip_image012

也许很多人搞不明白为什么我要重命名这两张表,然后在执行脚本来这样做呢?更怕历史记录找不见呢?我做过测试,如果在不重命名history两张表的情况下,两天估计都分表完成, 我做过测试,我的history有8G大小,我用8个小时都没有分表完成,更何况history_uint这个快30G的表,虽然这样做就是无法看到历史数据,我们可以完全搭建个LNMP或者LAMP,创建数据库,在创建的数据库上导入这个我们备份的mysql来查看以前的历史记录。或者在zabbxi server机器上做个虚拟目录,数据库指定到备份的服务器上;虽然这样有点蛋疼但是这也是我目前了解最快的不丢失数据的办法,也可以解决以后塞满表的情况!

1
2
3
4
5
6
如果不要zabbix的历史记录那么就很简单的来做了.如下:
use zabbix;
truncate table  history ;
optimize  table  history ;
truncate table history_str;
truncate table history_uint;

 


本文转自devilangel 51CTO博客,原文链接:http://blog.51cto.com/devliangel/1428325,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 缓存 监控
数据库优化技术:提升性能与效率的关键策略
【10月更文挑战第15天】数据库优化技术:提升性能与效率的关键策略
111 8
|
19天前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
54 11
|
2月前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
2月前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
2月前
|
存储 NoSQL 分布式数据库
微服务架构下的数据库设计与优化策略####
本文深入探讨了在微服务架构下,如何进行高效的数据库设计与优化,以确保系统的可扩展性、低延迟与高并发处理能力。不同于传统单一数据库模式,微服务架构要求更细粒度的服务划分,这对数据库设计提出了新的挑战。本文将从数据库分片、复制、事务管理及性能调优等方面阐述最佳实践,旨在为开发者提供一套系统性的解决方案框架。 ####
|
2月前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
58 4
|
2月前
|
SQL druid 数据库
如何进行数据库连接池的参数优化?
数据库连接池参数优化包括:1) 确定合适的初始连接数,考虑数据库规模和应用需求;2) 调整最大连接数,依据并发量和资源状况;3) 设置最小空闲连接数,平衡资源利用和响应速度;4) 优化连接超时时间,确保系统响应和资源利用合理;5) 配置连接有效性检测,定期检查连接状态;6) 调整空闲连接回收时间,适应访问模式并配合数据库超时设置。
|
2月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
57 7
|
2月前
|
SQL 缓存 监控
数据库优化
【10月更文挑战第29天】数据库优化
49 1
|
2月前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
36 5

推荐镜像

更多