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

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

最近负责公司的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,如需转载请自行联系原作者

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
16天前
|
监控 数据库 索引
数据库索引的设计与优化策略
在数据库系统中,索引的设计和优化对于数据检索效率至关重要。本文探讨了数据库索引的基本概念,介绍了常见的索引类型及其适用场景,并深入分析了如何根据实际需求设计和优化索引,以提升数据库查询性能和整体系统效率。
|
7天前
|
Prometheus 监控 Cloud Native
如何优化Java中的数据库连接池配置?
如何优化Java中的数据库连接池配置?
|
7天前
|
缓存 监控 Java
优化Spring Boot应用的数据库访问性能
优化Spring Boot应用的数据库访问性能
|
8天前
|
缓存 监控 Java
优化Spring Boot应用的数据库访问性能
优化Spring Boot应用的数据库访问性能
|
8天前
|
关系型数据库 大数据 数据库
数据库索引的优化策略与实践
数据库索引在提升查询效率中起到关键作用,本文探讨了多种数据库索引优化策略及其实际应用,旨在帮助开发者更好地设计和管理数据库索引,提升系统性能和用户体验。
|
11天前
|
SQL 缓存 Java
Java中的数据库优化与索引设计
Java中的数据库优化与索引设计
|
14天前
|
存储 缓存 关系型数据库
如何优化数据库查询?
【7月更文挑战第2天】如何优化数据库查询?
19 1
|
15天前
|
SQL 存储 Java
优化Java应用的数据库访问性能
优化Java应用的数据库访问性能
|
20天前
|
SQL 缓存 PHP
PHP 与数据库优化:提升Web应用性能的关键
在Web开发中,PHP作为一种流行的服务器端脚本语言,与数据库密切相关。本文探讨了如何通过PHP与数据库优化来提升Web应用的性能和响应速度。从数据库查询优化、索引的设计到PHP代码编写的最佳实践,我们将深入探讨每个方面如何影响应用的效率和用户体验。
|
18天前
|
SQL 缓存 负载均衡
数据库设计优化:性能提升与扩展性的技术探讨
【6月更文挑战第28天】数据库设计优化聚焦性能与扩展性:SQL优化、索引策略、缓存利用及分库分表、集群技术,旨在平衡处理速度与系统稳定性。通过智能SQL、复合索引、查询缓存减少数据库压力,垂直/水平拆分与集群实现数据分布式处理,提升并发能力。

推荐镜像

更多