zabbix mysql 表分区_为 zabbix 的 mysql 进行表分区

本文介绍了如何针对线上Zabbix数据库中history和history_uint表的大量数据进行MySQL表分区,以降低数据库压力。首先,关闭Zabbix的housekeeper功能,然后在MySQL双主环境下停止复制线程,备份原有表并创建新的分区表。通过脚本自动生成分区和插入数据的SQL语句,按指定粒度和数量进行分区,并逐步将旧数据导入新表。分区完成后,设置定时脚本以保持分区的最新状态,有效改善了数据库性能。
摘要由CSDN通过智能技术生成

一. 线上 zabbix 数据库的总数据量达到了180G,慢查询日志都是由于 history, history_uint 这两个表引起的mysql> selecttable_name,(data_length+index_length)/1024/1024 as total_mb, table_rows frominformation_schema.tables where table_name='history';

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

| table_name | total_mb       | table_rows |

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

| history   | 38281.28125000 |  225689376 |

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

1 row in set (0.00 sec)

mysql> selecttable_name,(data_length+index_length)/1024/1024 as total_mb, table_rows frominformation_schema.tables where table_name='history_uint';

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

| table_name   | total_mb       | table_rows |

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

| history_uint | 43551.34375000 |  189510565 |

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

1 row in set (0.05 sec)

决定对history, history_uint 进行表分区,来降低 mysql 的压力

注:在进行 mysql 分区时先在zabbix前端将 housekeeper 的功能关闭,关闭方法:

Administration --> General --> (右侧下拉框) Housekeeping

介绍,不过他们是使用存储过程(函数)来完成的,这里使用脚本来完成。

这里线上环境是的情况是mysql双主,把两个mysql的复制线程都停掉,然后在backup上执行脚本,执行OK之后,让primary去同步backup的数据

脚本实现的功能:将history重命名为history_bak

根据分区粒度,分区的开始时间,分区的数量生成要分区的sql语句,建立新的分区的history表

生成从history_bak里抽取数据导入history表的insert语句,将旧表的数据导入新表,生成的建表语句也是根据分区粒度来进行的

执行建表语句,创建history为分区表

5.执行update_history_1.sh脚本将旧表数据导入新表,这里因数据大小不一致,时间可能不同,脚本如下[root@zabbix_server zabbix_partitions]# cat partition.sh

#!/bin/bash

#

export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/root/bin

# day * 24 * 60 * 60

# 这个变量决定的是分区的粒度,3 代表每3天一个分区

part_interval=$[1*24*60*60]

# 这个变量决定的是分区的总数量,比如 part_interval 为3,这里为60,那么时间跨度将是180天

# ,分区数量有上限,别超过1024个

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值