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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 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,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第六章(操作本地数据库前置知识优化)
【4月更文挑战第6天】本文介绍了Node.js操作本地数据库的前置配置和优化,包括处理接口跨域的CORS中间件,以及解析请求数据的body-parser、cookie-parser和multer。还讲解了与MySQL数据库交互的两种方式:`createPool`(适用于高并发,通过连接池管理连接)和`createConnection`(适用于低负载)。
17 0
|
21天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
1月前
|
SQL 缓存 PHP
PHP技术探究:优化数据库查询效率的实用方法
本文将深入探讨PHP中优化数据库查询效率的实用方法,包括索引优化、SQL语句优化以及缓存机制的应用。通过合理的优化策略和技巧,可以显著提升系统性能,提高用户体验,是PHP开发者不容忽视的重要议题。
|
1月前
|
SQL 存储 JSON
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
亲爱的社区小伙伴们,Apache Doris 2.1.0 版本已于 2024 年 3 月 8 日正式发布,新版本开箱盲测性能大幅优化,在复杂查询性能方面提升100%,新增Arrow Flight接口加速数据读取千倍,支持半结构化数据类型与分析函数。异步多表物化视图优化查询并助力仓库分层建模。引入自增列、自动分区等存储优化,提升实时写入效率。Workload Group 资源隔离强化及运行时监控功能升级,保障多负载场景下的稳定性。新版本已经上线,欢迎大家下载使用!
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
|
1月前
|
存储 搜索推荐 关系型数据库
深度探讨数据库索引的数据结构及优化策略
深度探讨数据库索引的数据结构及优化策略
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】7、SQL 优化
【MySQL 数据库】7、SQL 优化
49 0
|
2月前
|
存储 监控 数据库
《优化数据库性能的六大技巧》
数据库作为后端开发中至关重要的一环,在实际应用中经常遇到性能瓶颈问题。本文将分享六大实用技巧,帮助开发者优化数据库性能,提升系统响应速度。
|
1月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
173 0
|
21天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
9天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。

推荐镜像

更多