当前位置: 首页 > news >正文

运维打铁:Mysql 分区监控以及管理

文章目录

    • 一、简介
    • 二、设计逻辑
      • 1、配置文件检查
      • 2、创建逻辑
      • 3、 删除逻辑
      • 4、重建表分区逻辑
      • 5、recognize maxvalue分区表逻辑
      • 6、创建多个未来分区逻辑
      • 7、定时检测分区是否创建成功,否则发送告警邮件。
    • 三、解决的问题
    • 四、配置例子与介绍

一、简介

  • 操作数据库,连接配置读取.env;

  • 分区信息配置config,内涵分区规则,log日志路径,邮件redis配置;

  • 每天定时任务进行执行(每一个小时执行),采用获取表分区的值(partition_value)对比当前时间(00:00:00)进行区分处理。

  • 依赖python3,pymysql、datetime , relativedelta

  • 以00:00:00秒创建分区,及处理过期分区。

二、设计逻辑

1、配置文件检查

  • 参数类型应用强类型,int或者str,不对则退出程序。

2、创建逻辑

  • 配置years,months,weeks,day_week,days值来创建年,月,星期,星期几,日来创建分区;

  • 检测如该分区表名称不存在,创建分区。否则不建。

3、 删除逻辑

  • 获取保留天数days_reserve_patition状态值,有值,则进行计算最先创建的表分区paritition_value值与当前时间相差大于等于需要保留的时间,即删除分区

4、重建表分区逻辑

  • 如不是分区表,需要创建,则配置partition_key,用来做分区表中key。
  • 支持unique key ,配置 unique_key_status 为 true
  • 支持指定partition_field_type 范围分区类型,INT,TO_DAYS,UNIX_TIMESTAMP。必须一定要配置partition_key

5、recognize maxvalue分区表逻辑

  • 如分区包含maxvalue,则用recogize来创建分区。
  • recognize 表,也就是有maxvalue的分区表,记录上一次recognize的分区名称,计算未来的几个分区名称,和分区值,判断分区是否存在,进行创建。

6、创建多个未来分区逻辑

  • 重建表分区以及创建表分区完成后,生成未来几个分区名和分区值,并判断是否已经创建,未创建则进行创建。

7、定时检测分区是否创建成功,否则发送告警邮件。

三、解决的问题

  • 1)、不是分区的表,变成分区表;
  • 2)、所有分区表批量管理,按年、月、周、日,来创建每次的分区;
  • 3)、过期分区定时清除;
  • 4)、创建分区失败,配置文件有问题会发送告警邮件;
  • 5)、创建多个未来分区;
  • 6)、创建规则可配置config;
  • 7)、支持TO_DAYS。UNIX_TIMESTAMP类型,范围分区类型;
  • 8)、支持maxvalue分区表再分区;
  • 9)、支持unique key,primary key 组合类型的表分区。

四、配置例子与介绍

  • env配置例子
 {"dbname": "database_name","hosts": "ip","username": "username","pwd": "password","port": 3306,},
  • config配置例子:
 {"database_name": "bitcc_orderlog","table_name": "t_user_cancel_order_log_*","weeks": 1,"multi_partitions": 5,"days_reserve_partition": 14,},每一个星期一创建未来5个星期的分区,
会删除14天之前的分区,
\*为范匹配,多个相同前缀的表。

-1)、配置文件
conf.config 配置文件为注册需要被管理的分区或非分区表

  • 年,月,星期,日分区参数,必选其一,必填(注意项):
参数类型必填项 1是,0否备注
database_namestring1数据库名称,如"bitcc_money"
table_namestring1需要分区的表,支持(*),如 t_user_trade_*;
yearsint0按每多少个年来创建分区
monthsint0按每多少个月来创建分区
weeksint0按每多少个星期来创建分区
day_weekint0星期几执行创建分区,当按周来创建分区时,必填 ,默认0,代表星期一
daysint0按每多少个天来创建分区
days_reserve_patitionint0分区保存多少天,配置这个参数就会删除过期分区
partition_keystring0哪个字段来分区;如该表不是分区表,则必须填, 如需创建例子:“create_at”
maxvalue_statusint0如该表分区设置了maxvalue,则必须填,1是,0否
multi_partitionsint0需要创建多少个未来分区,默认是0代表一个
partition_field_typestr0范围分区类型的选型,目前支持TO_DAYS,UNIX_TIMESTAMP。默认是UNIX_TIMESTAMP
unique_key_statusint0表中有primary key和unique key 同时出现,需要配置为1,为1时必须配置partition_key组合使用
  • cc_email_str cc邮件收件人,列表即可;
  • log_path 打印日志路径。
  • redis 连接信息配置

-2 )、项目代码结构介绍

  • 1)、conf.config.py 表分区规则配置;
  • 2)、lib.partition_operation.alter_partition.py 修改非分区表为分区表;
  • 3)、lib.partition_operation.create_partition.py 创建表分区;
  • 4)、lib.partition_operation.delete_partition.py 删除表分区表;
  • 5)、lib.partition_operation.recognize_partition.py maxvalue创建表分区;
  • 6)、lib.partition_operation.select_partition.py 查询表分区信息;
  • 7)、lib.conn_mysql.py 连接mysql操作函数;
  • 8)、lib.conn_redis.py 连接redis操作函数;
  • 9)、lib.calculate_partition.py 计算时间差,以及分区值partition_value
  • 10)、lib.logging_lib.py 打印日志函数;
  • 11)、lib.compution_time.py 计算不同格式的时间;
  • 12)、partition_main.py 管理主函数,进入函数;
  • 13)、lib.send_email 发送日志邮件函数;
  • 14)、lib.check_env_info.py 获取env config信息;
  • 15)、lib.check_config.py 统一配置信息并且校验配置正确性;

相关文章:

  • 分享Matlab成功安装Support Package硬件支持包的方法
  • 通过音频的pcm数据格式利用canvas绘制音频波形图
  • GStreamer 简明教程(十一):插件开发,以一个音频生成(Audio Source)插件为例
  • Centos7.2安装Xmap
  • 司法考试模拟考试系统
  • LLM Graph Rag(基于LLM的事件图谱RAG)
  • 红黑树——如何靠控制色彩实现平衡的?
  • 记录搭建自己应用中心
  • OpenAI 推出「轻量级」Deep Research,免费用户同享
  • CSS 入门全解析
  • 0. Selenium工具的安装
  • deep鼠标跟随插件
  • 跟着尚硅谷学vue-day5
  • NVIDIA 高级辅助驾驶汽车安全系统 系列读后感(1)
  • 数据湖DataLake和传统数据仓库Datawarehouse的主要区别是什么?优缺点是什么?
  • excel如何绘制直方图
  • 赛灵思 XCKU115-2FLVB2104I Xilinx Kintex UltraScale FPGA
  • Kafka Tool(Offset Explorer)国内下载: Kafka可视化连接工具
  • mysql基础——数据表查询(全面解析)
  • Docker拉取镜像代理配置实践与经验分享
  • 国家发改委:建立实施育儿补贴制度
  • 广州海关原党委委员、副关长刘小威被开除党籍
  • 新干式二尖瓣瓣膜国内上市,专家:重视瓣膜病全生命周期管理
  • 罗马教皇方济各葬礼在梵蒂冈举行
  • 本周看啥|在电影院里听民谣,听摇滚,燥起来吧
  • 为国出征指纹却无法识别?他刷新了我军在这一项目的最好成绩