当前位置: 首页 > 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 统一配置信息并且校验配置正确性;
http://www.xdnf.cn/news/148411.html

相关文章:

  • Lesar: 面向 Lustre/Scade 语言的形式化模型检测工具
  • @Transactional的一点理解
  • 【C语言】动态经典试题练习
  • 告别并发更新噩梦:MyBatis-Plus @Version 乐观锁实战指南
  • 深入详解人工智能数学基础——概率论中的马尔可夫链蒙特卡洛(MCMC)采样
  • CAPL编程_03
  • vue-lottie的使用和配置
  • 正大模型视角下的市场结构判断逻辑
  • 使用 SSE + WebFlux 推送日志信息到前端
  • 矫平机深度解析:操作实务、行业标准与智能化升级
  • 一款好的私有云产品推荐——优刻得私有云(UCloudStack Pro)产品白皮书
  • 示波器测试差分信号
  • cpu性能统计
  • 网络犯罪全球化,数字时代的跨国诈骗危机
  • Linux——线程(1)线程概念与控制
  • 12.thinkphp验证
  • 粒子群优化算法(Particle Swarm Optimization, PSO)的详细解读
  • PR第二课--混剪
  • 嵌入式通信技术实践与教学创新:从蓝牙协议到虚实融合的实验革命
  • 【Nacos-安全与限流机制健全06 】
  • 第19章:Multi-Agent多智能体系统介绍
  • C/C++时间函数详解及使用场景
  • 找出字符串中第一个匹配项的下标
  • 关于hbaseRegion和hbaseRowKey的一些处理
  • 在 Ubuntu 22.04|20.04|18.04 上安装 PostgreSQL 13
  • 4/24杂想
  • 慧星云荣登杭州AI卧龙图
  • windows安装jax和jaxlib的教程(cuda)成功安装
  • C++进阶----多态
  • 这些项目可以在以后年度结转扣除!