【操作文档】mysql分区操作步骤.docx

1、建立分区表

执行 tb_intercept_notice表-重建-添加分区.sql 文件;

DROP TABLE IF EXISTS `tb_intercept_notice_20241101_new`;
CREATE TABLE `tb_intercept_notice_20241101_new` (`id` char(32) NOT NULL COMMENT 'id',`number` varchar(30) NOT NULL COMMENT '号码',`create_time` datetime(3) NOT NULL DEFAULT '2000-01-22 00:00:00.000' COMMENT '创建时间',PRIMARY KEY (`id`,`create_time`) USING BTREE,KEY `number` (`number`) USING BTREE,KEY `create_time` (`create_time`) USING BTREE,KEY `intercept_time` (`intercept_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='拦截信息';# 添加分区(20241001 号开始)
ALTER TABLE tb_intercept_notice_20241101_new
PARTITION BY RANGE (TO_DAYS(`create_time`))
(PARTITION p20241001 VALUES LESS THAN (TO_DAYS('2024-10-02'))
);

功能:创建带有分区的 tb_intercept_notice_20241101_new 表,并添加初始分区 20241001;

2、创建调用存储过程

#添加分区-存储过程-创建 - 不带数据库参数
delimiter $$
DROP PROCEDURE IF EXISTS procedure_add_partition
$$# 参数
# tableName:表名
# partitionName:分区名称的日期部分(格式:yyyyMMdd)
CREATE PROCEDURE procedure_add_partition(IN tableName varchar(100),IN partitionName varchar(8))BEGIN# 声明 新增分区后一天日期DECLARE v_next_day varchar(20);# 赋值SET v_next_day = date_format(partitionName + INTERVAL 1 DAY, '%Y-%m-%d');SET @sql = concat('alter table ',tableName,' add partition (partition p', partitionName, ' values less than(TO_DAYS(''',v_next_day, ''')))');PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;END$$
delimiter;#删除分区-存储过程-创建 - 不带数据库参数
delimiter $$
DROP PROCEDURE IF EXISTS procedure_del_partition
$$# 参数
# tableName:表名
# partitionName:分区名称的日期部分(格式:yyyyMMdd)
CREATE PROCEDURE procedure_del_partition(IN tableName varchar(100),IN partitionName varchar(8))BEGINSET @sql = concat('alter table ',tableName,' drop partition p', partitionName);PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;END$$
delimiter;

执行 添加分区-存储过程-创建.sql 文件创建添加分区的存储过程;

执行 删除分区-存储过程-创建.sql 文件创建删除分区的存储过程;

3、开启 mysql 事件

执行 SELECT @@event_scheduler; 命令,查看mysql 是否开启事件,Value 为 NO 表示开启成功;若为OFF,则使用 SET GLOBAL event_scheduler = ON; 命令开启;

4、创建事件

更改tb_intercept_notice表-添加分区-事件.sql 文件并执行;

(1)打开 tb_intercept_notice表-添加分区-事件.sql 文件,根据需求,更新脚本中的变量;(主要更改数据库名称和往当前日期之后提前创建分区的天数,默认30天

DELIMITER $$
drop event if exists tb_intercept_notice_add_partition_event
$$
create event tb_intercept_notice_add_partition_event
on schedule-- AT TIMESTAMP表示该事件只执行一次
-- AT TIMESTAMP '2020-11-20 00:00:00'-- 测试设置为每10秒执行一次
-- every 2 second
-- every 1 minute
-- STARTS CURRENT_TIMESTAMP-- 现网可以设置为每天执行一次(每天的当前时间执行)every 1 daySTARTS CURRENT_TIMESTAMPdo BEGINDECLARE v_sysdate date;        				# 声明 当前时间DECLARE v_maxdate date;   		 			# 声明 目前分区值中的最大值DECLARE v_pt varchar(20);      				# 声明 分区名称数字部分DECLARE databaseName varchar(100);			# 声明 数据库名称		DECLARE tableName varchar(100);				# 声明 表名DECLARE i int;								# 声明 从当前日期往后新增分区天数#变量赋值#数据库名称(根据需求更改)set databaseName = '111_gc_test_1';#表名(根据需求更改)set tableName = 'tb_intercept_notice';#从当前日期往后新增分区天数(根据需求更改)set i = 30; # 赋值v_sysdate为当前时间(不必更改)set v_sysdate = sysdate();		 SELECT max(cast(replace(partition_name, 'p', '') AS date)) AS valINTO   v_maxdateFROM   INFORMATION_SCHEMA.PARTITIONSWHERE  TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName;# INTERVAL 时间计算的关键字WHILE v_maxdate < (v_sysdate + INTERVAL i DAY) DO# 下一分区日期为当前分区最大值加一SET v_pt = date_format(v_maxdate+ INTERVAL 1 DAY ,'%Y%m%d');# 调用增加分区存储过程call procedure_add_partition(databaseName,tableName,v_pt);# 最大值加一SET v_maxdate = v_maxdate + INTERVAL 1 DAY;END WHILE;END$$
delimiter;

(2)更改完成后,执行 tb_intercept_notice表-添加分区-事件.sql 文件;

功能:提前往当前日期后创建设定天数的分区;

(3)打开 tb_intercept_notice表-删除分区-事件.sql 文件,根据需求,更新脚本中的变量;(主要更改数据库名称和从当前日期往前保留分区的天数,默认30天

(4)更改完成后,执行 tb_intercept_notice表-删除分区-事件.sql 文件;

功能:删除超过设定保留天数的分区;

DELIMITER $$
drop event if exists tb_intercept_notice_del_partition_event 
$$
create event tb_intercept_notice_del_partition_event
on schedule-- AT TIMESTAMP表示该事件只执行一次
-- AT TIMESTAMP '2020-11-20 00:00:00'-- 测试设置为每10秒执行一次
-- every 2 second
-- every 1 minute
-- STARTS CURRENT_TIMESTAMP-- 现网可以设置为每天执行一次(每天的当前时间执行)every 1 daySTARTS CURRENT_TIMESTAMPdo BEGINDECLARE v_sysdate date;        				# 声明 当前时间DECLARE v_mindate date;   		 		    # 声明 目前分区值中的最小值DECLARE v_pt varchar(20);      				# 声明 分区名称数字部分DECLARE databaseName varchar(100);			# 声明 数据库名称		DECLARE tableName varchar(100);				# 声明 表名DECLARE i int;								# 声明 从当前日期往前保留分区天数#变量赋值#数据库名称(根据需求更改)set databaseName = '111_gc_test_1';#表名(根据需求更改)set tableName = 'tb_intercept_notice';#从当前日期往前保留分区天数(根据需求更改)set i = 30; # 赋值v_sysdate为当前时间(不必更改)set v_sysdate = sysdate();SELECT min(cast(replace(partition_name, 'p', '') AS date)) AS valINTO   v_mindateFROM   INFORMATION_SCHEMA.PARTITIONSWHERE  TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName;# INTERVAL 时间计算的关键字WHILE v_mindate < (v_sysdate - INTERVAL i DAY) DO# 将最小分区值赋给 v_pt 变量SET v_pt = date_format(v_mindate,'%Y%m%d');# 调用删除分区存储过程call procedure_del_partition(databaseName,tableName,v_pt);# 最小值加一操作SET v_mindate = v_mindate + INTERVAL 1 DAY;END WHILE;END$$
delimiter;

5、表分区检查

执行下面sql,查看分区情况,注意更改sql中的变量(数据库名称、表名)

select partition_name, partition_description as val 
from information_schema.partitions
where table_schema='数据库名称' and table_name='表名';

根据执行结果,分析分区是否是设定的范围,比如新增和删除分区都是使用3天,若今天是20241101,则执行结果分区最大值为:20241104,分区最小值为:20241029;

6、tb_intercept_notice 表替换

若以上步骤都成功,则执行 tb_intercept_notice表-重建-之后新旧表重命名.sql 文件;

功能:将 tb_intercept_notice 表替换为分区后的表;tb_intercept_notice 表被改名为:tb_intercept_notice_backups_20241101;

# 重命名tb_intercept_notice表
ALTER TABLE tb_intercept_notice RENAME TO tb_intercept_notice_backups_20241101;# 将新创建的表改名为tb_intercept_notice表
ALTER TABLE tb_intercept_notice_20241101_new RENAME TO tb_intercept_notice;

7、单次调用存储过程添加/删除分区

打开 添加分区-存储过程-调用.sql 文件,更改存储过程参数值后执行该文件;

打开 删除分区-存储过程-调用.sql 文件,更改存储过程参数值后执行该文件;

#添加分区-存储过程-调用 - 不带数据库参数
call procedure_add_partition('表名','分区名称的日期部分(格式:yyyyMMdd)');#删除分区-存储过程-调用 - 不带数据库参数
call procedure_del_partition('表名','分区名称的日期部分(格式:yyyyMMdd)');

8、其他命令

  • 查看存储过程:show procedure status like 'proc%';
  • 删除存储过程:DROP PROCEDURE IF EXISTS 存储过程名;
  • 查看当前数据库事件:SHOW EVENTS;
  • 查看所有数据库事件:SELECT * FROM information_schema.EVENTS;
  • 开启事件功能:SET GLOBAL event_scheduler = ON;
  • 关闭事件功能:SET GLOBAL event_scheduler = OFF;
  • 关闭指定事件:ALTER EVENT 事件名称 ON COMPLETION PRESERVE DISABLE;
  • 开启指定事件:ALTER EVENT 事件名称 ON COMPLETION PRESERVE ENABLE;
  • 删除指定事件:drop event if exists 事件名称;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482300.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

S4 UPA of AA :新资产会计概览

通用并行会计&#xff08;Universal Parallel Accounting&#xff09;可以支持每个独立的分类账与其他模块集成&#xff0c;UPA主要是为了支持平行评估、多货币类型、财务合并、多准则财务报告的复杂业务需求 在ML层面UPA允许根据不同的分类账规则对物料进行评估&#xff0c;并…

ScribblePrompt 医学图像分割工具,三种标注方式助力图像处理

ScribblePrompt 的主要目标是简化医学图像的分割过程&#xff0c;这在肿瘤检测、器官轮廓描绘等应用中至关重要。相比依赖大量人工标注数据&#xff0c;该工具允许用户通过少量输入&#xff08;例如简单的涂鸦或点位&#xff09;来引导模型优化分割结果。这种方式减少了医学专家…

jdk各个版本介绍

Java Development Kit&#xff08;JDK&#xff09;是Java平台的核心组件&#xff0c;它包含了Java编程语言、Java虚拟机&#xff08;JVM&#xff09;、Java类库以及用于编译、调试和运行Java应用程序的工具。 JDK 1.0-1.4&#xff08;经典时代&#xff09; • JDK 1.0&#xff…

【Python爬虫五十个小案例】爬取猫眼电影Top100

博客主页&#xff1a;小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介&#xff1a;分享五十个Python爬虫小案例 &#x1f40d;引言 猫眼电影是国内知名的电影票务与资讯平台&#xff0c;其中Top100榜单是影迷和电影产业观察者关注的重点。通过爬取猫眼电影Top10…

Doge东哥wordpress主题

Doge东哥wordpress主题是一款专为中小型企业设计的WordPress外贸网站模板&#xff0c;它以其现代、专业且用户友好的界面&#xff0c;为企业提供了一个展示产品和服务的理想平台。以下是对该模板的详细描述&#xff1a; 首页设计概览 首页的设计简洁而不失大气&#xff0c;顶…

【力扣】541.反转字符串2

问题描述 思路解析 每当字符达到2*k的时候&#xff0c;判断&#xff0c;同时若剩余字符>k,只对前k个进行判断&#xff08;这是重点&#xff09;因为字符串是不可变变量&#xff0c;所以将其转化为字符串数组&#xff0c;最后才将结果重新转变为字符串 字符串->字符数组 …

C++练级计划-> 《IO流》iostream fstream sstream详解

如果是想全部过一遍就看完&#xff0c;如果想具体的了解某一个请点目录。因为有三种流的使用可能内容多 目录 流是什么&#xff1f; CIO流&#xff08;iostream&#xff09; io流的注意事项 cin和cout为什么能直接识别出类型和数据 fstream fstream的使用方法&#xff…

EDA软件研发的DevOps平台

1&#xff1a;什么是DevOps DevOps是十几年前&#xff0c;在互联网比较火的词&#xff0c;实际上就是ci/cd平台的另外一种说法&#xff0c;核心是说打破研发&#xff0c;测试&#xff0c;运维的边界&#xff0c;能够将整个产品开发的流程快速循环起来&#xff0c;随时可发版&a…

自动化是语法,智能化是语义与语用

自动化与智能化可以从语言学的角度来进行类比和探讨。 1. 自动化是语法 自动化可以类比为“语法”的部分&#xff0c;因为它关注的是操作过程的规则、结构和执行方式。语法是语言中关于词汇、句子结构和规则的系统&#xff0c;它提供了语言运作的框架和规范。类似地&#xff0c…

Spring源码-Bean的生命周期和模板方法

Bean的生命周期 之前我们提到过SpringApplication的run方法不光可以启动程序&#xff0c;还会返回一个容器&#xff0c;为了演示Bean的从创建到销毁的整个阶段&#xff0c;我们会关闭掉容器。 接下来我们来看想要加入到容器当中的类&#xff0c;映入眼帘的是这几个方法和其注解…

Mysql数据库基础篇笔记

目录 sql语句 DDL——数据库定义语言&#xff08;定义库&#xff0c;表&#xff0c;字段&#xff09; 数据库操作&#xff1a; 表操作&#xff1a; DML 增删改语句 DQL 语法编写顺序&#xff1a; 条件查询 DCL 用户管理&#xff1a; 权限管理&#xff1a; 函数 常见字符串内置函…

算法编程题-煎饼排序 不含AAA或者BBB的字符串

算法编程题-煎饼排序 &&不含AAA或者BBB的字符串 煎饼排序原题描述思路简述代码实现复杂度分析 不含AAA或者BBB的字符串原题描述思路简述代码实现复杂度分析 摘要&#xff1a;本文将对两道LeetCode原题进行介绍&#xff0c;分别是煎饼排序和不含AAA或者BBB的字符串。在陈…

分享一款 Vue 图片编辑插件 (推荐)

&#x1f4a5;本篇文章给大家分享一款强大到没朋友的Vue图片编辑插件&#xff0c;可以对图片进行旋转、缩放、裁剪、涂鸦、标注、添加文本等&#xff0c;快来试试并收藏吧&#xff01;&#x1f495; 这是一款对图片进行旋转、缩放、裁剪、涂鸦、标注、添加文本在线处理的图片处…

MySQL 核心基础 | Pandaer杂货铺

MySQL一个后端开发必须会接触的中间件&#xff0c;也是关系型数据库的代表。如果你希望看下去这篇文章&#xff0c;需要你有使用MySQL或者相关关系型数据库的经验&#xff0c;不然这篇文章在你眼中就会索然无味了。 这篇文章不会讲解如何使用MySQL&#xff0c;例如如何安装&am…

【网络】应用层协议HTTPHTTPcookie与sessionHTTPS协议原理

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;计算机网络原理_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.应用层协议HTTP 2.认识 URL 2.1 urlencode 和 urldecode 3.HTTP 协议请求与响应格式 3.1 HTTP 请求 3.2 HTTP 响应 …

搭建业务的性能优化指南

这是一篇搭建业务优化的心路历程&#xff0c;也是写给搭建业务的性能优化指南。 前言 直到今天&#xff0c;淘内的页面大多都迁移到了 SSR&#xff0c;从我们终端平台 - 搭建研发团队的视角看&#xff0c;业务大致可以分为两类 —— 搭建派 和 源码派。 这两者互不冲突&#xf…

Swift实现高效链表排序:一步步解读

文章目录 前言摘要问题描述题解解题思路Swift 实现代码代码分析示例测试与结果 时间复杂度空间复杂度总结关于我们 前言 本题由于没有合适答案为以往遗留问题&#xff0c;最近有时间将以往遗留问题一一完善。 148. 排序链表 不积跬步&#xff0c;无以至千里&#xff1b;不积小流…

开源 - Ideal库 - Excel帮助类,TableHelper实现(三)

书接上回&#xff0c;我们今天继续讲解实现对象集合与DataTable的相互转换。 01、把表格转换为对象集合 该方法是将表格的列名称作为类的属性名&#xff0c;将表格的行数据转为类的对象。从而实现表格转换为对象集合。同时我们约定如果类的属性设置了DescriptionAttribute特性…

基于DHCP,ACL的通信

该问题为华为的学习资料 1.首先把所有的PC机全部设置为DHCP 2.配置地址 3.ospf 4.dhcp 5.acl AR1 dhcp en interface GigabitEthernet0/0/0ip address 192.168.1.254 255.255.255.0 dhcp select global interface GigabitEthernet0/0/1ip address 10.1.12.1 255.255.255.…

基于深度学习的卷积神经网络十二生肖图像识别系统(PyQt5界面+数据集+训练代码)

本研究提出了一种基于深度学习的十二生肖图像识别系统&#xff0c;旨在利用卷积神经网络&#xff08;CNN&#xff09;进行图像分类&#xff0c;特别是十二生肖图像的自动识别。系统的核心采用了两种经典的深度学习模型&#xff1a;ResNet50和VGG16&#xff0c;进行图像的特征提…