百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Mysql自动建立表分区,按天分区,默认删除30天前的分区

csdh11 2024-12-17 12:12 35 浏览

平时工作中所遇到的问题,今天为大家整理一下,废话不多说,直接上代码


建立存储过程后,需创建Mysql定时任务,来每天自动执行,我自动的版本,默认晚上11点自动调用存储过程



注:如表中存在数据,必须手动对已有数据建立分区,且分区为主键或者联合主键,下面直接贴代码,可根据自己实际情况进行修改。

-- 增加新分区

-- 不同于insert into A select from B,A必须存在。

SELECT max(cast(replace(partition_description, '''', '') AS date)) AS val

INTO v_maxdate

FROM INFORMATION_SCHEMA.PARTITIONS

WHERE TABLE_NAME = 'tb_visit' AND TABLE_SCHEMA = 'fzmy'; # 目标表 数据库实例名称,根据实际情况添加

set v_sysdate = sysdate(); # 赋值v_sysdate为当前时间



-- INTERVAL 时间计算的关键字

-- 当前写法默认创建三天后的分区表 可更改

WHILE v_maxdate <= (v_sysdate + INTERVAL 1 DAY) DO

SET v_pt = date_format(v_maxdate + INTERVAL 1 DAY , '%Y%m%d');

SET v_maxval = v_maxdate + INTERVAL 2 DAY;

SET add_sql = concat('alter table tb_visit add partition (partition p', v_pt, ' values less than(''', v_maxval, '''))'); # tb_visit 目标表,根据实际情况修改

SET @sql=add_sql;

PREPARE stmt FROM @sql; # 分配给这条SQL语句一个名字供之后调用

EXECUTE stmt; # 命令执行

DEALLOCATE PREPARE stmt; # 执行完后,释放掉

SET v_maxdate = v_maxdate + INTERVAL 1 DAY; # 最大值 加一操作

END WHILE;


-- 查找最早的分区

SELECT min(cast(replace(partition_description, '''', '') AS date)) AS val

INTO v_mindate

FROM INFORMATION_SCHEMA.PARTITIONS

WHERE TABLE_NAME = 'tb_visit' AND TABLE_SCHEMA = 'fzmy';# tb_visit 目标表,根据实际情况修改


-- 删除30天前的旧分区

WHILE v_mindate <= (v_sysdate - INTERVAL 30 DAY) DO

SET v_pt = date_format(v_mindate , '%Y%m%d');

SET del_sql = concat('alter table tb_visit drop partition p', v_pt); # tb_visit 目标表,根据实际情况修改

set @sql=del_sql;

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

SET v_mindate = v_mindate + INTERVAL 1 DAY;

END WHILE;


END

------------------------------------- 此处为分界线 -------------------------------------------

-- 创建定时任务

create event ceshi_partition # 定时任务名称

-- 每天晚上23点执行(待验证)

ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 23 HOUR)

on completion preserve disable

do call p_partition_test(); # 调用存储过程,此处为存储过程名称

相关推荐

干货-okHttp的优点-收藏了(okhttp的好处)

OkHttp相较于其它的实现有以下的优点.支持SPDY,允许连接同一主机的所有请求分享一个socket。如果SPDY不可用,会使用连接池减少请求延迟。使用GZIP压缩下载内容,且压缩操作对用...

如何在 Java 项目中集成 DeepSeek

一、使用官方SDK基础集成1.添加依赖(Maven)<dependency><groupId>com.deepseek</groupId>...

spring cloud gateway 性能优化思路

SpringCloudGateway是一个高性能的API网关,但在实际的生产环境中,可能会遇到一些性能瓶颈。以下是一些SpringCloudGateway的性能优化方面:调整线程池...

你对Android中的okHttp的使用真的了解吗

框架下载地址:https://github.com/square/okhttp今天给大家讲解下网络框架okhttp的使用,这个框架非常强大,很多框架都用它来加载网络资源,目前很多开发者还在用As...

京东大佬问我,Nginx并发连接如何设置?详细说明

京东大佬问我,Nginx并发连接如何设置?详细说明首先,我需要回忆一下Nginx的并发模型。Nginx是基于事件驱动的异步架构,所以它的并发处理能力和配置参数有很大关系。主要的参数应该包括worker...

如何实现一个连接池?一文带你深入浅出,彻底搞懂

-前言-【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。...

Golang 网络编程(golang 系统编程)

TCP网络编程存在的问题:拆包:对发送端来说应用程序写入的数据远大于socket缓冲区大小,不能一次性将这些数据发送到server端就会出现拆包的情况。通过网络传输的数据包最大是1500字节,当TCP...

Spring6|Spring Boot3有哪些HTTP客户端可以选择

个人博客:无奈何杨(wnhyang)个人语雀:wnhyang...

10. 常用标准库(标准库有哪些)

本章深入解析Go语言核心标准库的关键功能与生产级应用技巧,结合性能优化与安全实践,提供高效开发指南。10.1fmt/io/os10.1.1fmt高级格式化...

Nginx之连接池(nginx 长连接 连接复用)

我们知道Nginx利用连接池来增加它对资源的利用率。下面我们一起来看看Nginx是如何使用连接池的。从上一节模块开始已经慢慢会接触一些Nginx的源码部分来。每个worker进程都有一个独立的ngx...

开发者必备的Android开发资源之OkHttp

小编在这里给各位Android开发者介绍的资源包括工具、库和网站等。有效地利用它们,将有助于减轻我们的工作量,提高我们的工作效率。为什么需要一个HTTP库Android系统提供了两种HTTP通信类,H...

Java对接DeepSeek API:从零开始打造智能应用

一、环境搭建与准备工作1.1开发工具准备JDK...

OpenFeign常用配置(openfeign使用教程)

1、快速入门:OpenFeign是一个声明式的http客户端,是springcloud在eureka公司开源的feign基础上改造而来。其作用及时基于springmvc的常见注解,帮我们优雅的实现h...

栋察宇宙:Python 中的 requests 库学习介绍

分享乐趣,传播快乐,增长见识,留下美好。...

Python3的下一代HTTP客户端——HTTPX

前言在Python中,访问网络资源最有名的库就是...