【操作文档】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.mzph.cn/news/887655.shtml

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

相关文章

使用 pycharm 新建不使用 python 虚拟环境( venv、conda )的工程

有时候我们发现一个好玩的 demo&#xff0c;想赶快在电脑上 pip install 一下跑起来&#xff0c;发现因为 python 的 venv、conda 环境还挺费劲的&#xff0c;因为随着时间的发展&#xff0c;之前记得很清楚的 venv、conda 的用法&#xff0c;不经常使用&#xff0c;半天跑不起…

安全设备-日志审计-数据管理

7 日志审计系统数据管理 7.1 日志审计系统数据管理概述 日志审计系统数据管理系统自身数据存储管理&#xff0c;并对自身配置、采集的日志进行统一管理。 7.2 日志审计系统数据管理配置举例 7.2.1 用户场景 用户通过数据管理配置&#xff0c;实现对系统的备份、清理、转存…

简单的Activiti Modoler 流程在线编辑器

简单的Activiti Modoler 流程在线编辑器 1.需求 我们公司使用的流程是activiti5.22.0&#xff0c;版本有些老了&#xff0c;然后使用的编辑器都是eclipse的流程编辑器插件&#xff0c;每次编辑流程需要打开eclipse进行编辑&#xff0c;然后再导入到项目里面&#xff0c;不是特…

玩转 uni-app 静态资源 static 目录的条件编译

一. 前言 老生常谈&#xff0c;了解 uni-app 的开发都知道&#xff0c;uni-app 可以同时支持编译到多个平台&#xff0c;如小程序、H5、移动端 App 等。它的多端编译能力是 uni-app 的一大特点&#xff0c;让开发者可以使用同一套代码基于 Vue.js 的语法编写程序&#xff0c;然…

云技术-docker

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团…

【C++】从C语言到C++学习指南

如果你也是从C语言一路过来的&#xff0c;那么请一起看下去吧&#xff01; 文章目录 面型对象程序设计C基础C和C一些语法区别C在非对象方面对C语言的扩充C的一些标准&#xff08;兼容旧标准&#xff09; 首先&#xff0c;在C的学习中&#xff0c;我们要时刻清醒一点&#xff1…

【FPGA开发】Vivado自定义封装IP核,绑定总线

支持单个文件的封装、整个工程的封装&#xff0c;这里用单个文件举例。 在文件工程目录下&#xff0c;自建一个文件夹&#xff0c;里面放上需要封装的verilog文件。 选择第三个&#xff0c;指定路径封装&#xff0c;找到文件所在目录 取个名&#xff0c;选择封装IP的路径 会…

CA系统(file.h---申请认证的处理)

#pragma once #ifndef FILEMANAGER_H #define FILEMANAGER_H #include <string> namespace F_ile {// 读取文件&#xff0c;返回文件内容bool readFilename(const std::string& filePath);bool readFilePubilcpath(const std::string& filePath);bool getNameFro…

前端-Git

一.基本概念 Git版本控制系统时一个分布式系统&#xff0c;是用来保存工程源代码历史状态的命令行工具 简单来说Git的作用就是版本管理工具。 Git的应用场景&#xff1a;多人开发管理代码&#xff1b;异地开发&#xff0c;版本管理&#xff0c;版本回滚。 Git 的三个区域&a…

深入浅出摸透AIGC文生图产品SD(Stable Diffusion)

hihi,朋友们,时隔半年(24年11月),终于能腾出时间唠一唠SD了🤣,真怕再不唠一唠,就轮不到SD了,技术更新换代是在是太快! 朋友们,最近(24年2月)是真的没时间整理笔记,每天都在疯狂的学习Stable Diffusion和WebUI & ComfyUI,工作实在有点忙,实践期间在飞书上…

HCIP——堆叠技术实验配置

目录 一、堆叠的理论知识 二、堆叠技术实验配置 三、总结 一、堆叠的理论知识 1.1堆叠概述&#xff1a; 是指将两台交换机通过堆叠线缆连接在一起&#xff0c;从逻辑上变成一台交换设备&#xff0c;作为一个整体参与数据的转发。 1.2堆叠的基本概念 堆叠系统中所有的单台…

快速上手:如何开发一个实用的 Edge 插件

在日常浏览网页时&#xff0c;背景图片能够显著提升网页的视觉体验。如果你也想为自己的浏览器页面添加个性化背景图片&#xff0c;并希望背景图片设置能够持久保存&#xff0c;本文将介绍如何通过开发一个自定义Edge插件来实现这一功能。我们将涵盖保存背景设置到插件选项页&a…

介绍一下atol(arr);(c基础)

hi , I am 36 适合对象c语言初学者 atol(arr)&#xff1b;是返回整数(long型)&#xff0c;整数是arr数组中字符中数字 格式 #include<stdio.h> atol(arr); 返回值arr数组中的数字 未改变arr数组 #include<stdio.h> //atol(arr); 返 <stdlib> int main…

Python的排序算法

一、算法 1.1 算法概念 算法就是计算机解决问题的方法或者步骤 程序 数据结构 算法 1.2 算法的特性 1】确定性&#xff1a; 算法的每条语句具有明确的意思&#xff0c;不能模棱两可 2】有穷性&#xff1a;在执行一定的时间后&#xff0c;能自动结束算法 3】输入&#…

npm install -g@vue/cli报错解决:npm error code ENOENT npm error syscall open

这里写目录标题 报错信息1解决方案 报错信息2解决方案 报错信息1 使用npm install -gvue/cli时&#xff0c;发生报错&#xff0c;报错图片如下&#xff1a; 根据报错信息可以知道&#xff0c;缺少package.json文件。 解决方案 缺什么补什么&#xff0c;这里我们使用命令npm…

在windows操作系统上,用git与github账户连接

一、环境准备 1.1 git软件 1.2 github账号 1.3 创建一个项目目录&#xff0c;比如 D:\project\gitproject 二、开始操作 1. 进入项目目录下&#xff0c;右键&#xff0c;如图&#xff0c;打开git bash命令行 2. 在命令行输入以下三个命令 $ git config --global user.name &quo…

视频监控实现画面缩放功能

文章目录 概要一、功能说明二、核心实现代码三、技术细节 概要 在视频监控系统中&#xff0c;经常需要查看视频画面中的细节。通过实现区域放大、滚轮缩放和拖拽平移等功能&#xff0c;可以让用户更方便地观察视频细节。本文介绍如何在 Windows 系统下实现这些交互功能。 一、…

鸿蒙本地模拟器 模拟TCP服务端的过程

鸿蒙模拟器模拟TCP服务端的过程涉及几个关键步骤&#xff0c;主要包括创建TCPSocketServer实例、绑定IP地址和端口、监听连接请求、接收和发送数据以及处理连接事件。以下是详细的模拟过程&#xff1a; **1.创建TCPSocketServer实例&#xff1a;**首先&#xff0c;需要导入鸿蒙…

Three.js 和其他 WebGL 库 对比

在WebGL开发中&#xff0c;Three.js是一个非常流行的库&#xff0c;它简化了3D图形的创建和渲染过程。然而&#xff0c;市场上还有许多其他的WebGL库&#xff0c;如 Babylon.js、PlayCanvas、PIXI.js 和 Cesium&#xff0c;它们也有各自的特点和优势。本文将对Three.js 与这些常…

【04】MySQL数据库和数据表的基本操作详解与实例

文章目录 一、连接MySQL服务器二、数据库的基本操作2.1数据库的基本操作1. 创建数据库2. 选择数据库3. 删除数据库4.查询所有数据库5.修改数据库的字符集 2.2 数据表的基本操作1. 创建数据表2. 查看数据表结构3. 删除数据表4. 修改数据表5. 插入数据6. 查询数据7. 更新数据8. 删…