【操作文档】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团…

Java基础夯实——2.9 多线程如何共享数据

在 Java 多线程编程中&#xff0c;共享数据通过以下几种方式实现&#xff1a; 1. 使用共享对象 多个线程可以通过引用同一个对象来实现数据共享。例如&#xff1a; class SharedData {private int count;public synchronized void increment() {count;}public synchronized …

如何将Asp.net Core站点部署到CentOS

我们要想在linux系统中运行asp.net core程序&#xff0c;有两种方式&#xff1a; 直接部署在linux系统中通过docker镜像部署在linux系统中 今天就来看下&#xff0c;如何直接把asp.net core应用站点部署到CentOS中&#xff01; 安装.NET Core SDK 添加微软包地址到rpm&…

【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…

深入理解 MySQL 锁机制:分类、实现与优化

在高并发的数据库应用中&#xff0c;锁机制是保障事务在操作数据库时数据一致性和完整性的重要工具。MySQL 提供了多种类型的锁&#xff0c;不同的存储引擎和场景下的实现各具特点。本篇文章将详细介绍 MySQL 锁的分类、实现&#xff08;主动与被动&#xff09;以及优化策略。 …

前端-Git

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

QT配置文件详解

TEMPLATElib TEMPLATE变量用于指定项目模板类型&#xff0c;其值可以是以下几种&#xff1a; app&#xff1a;建立一个应用程序的makefile&#xff0c;这是默认值。lib&#xff1a;建立一个库的makefile。vcapp&#xff1a;建立一个应用程序的Visual Studio项目文件。vclib&a…

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

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

Maven 如何配置忽略单元测试

在使用 Maven 进行项目构建时&#xff0c;有时您可能希望跳过测试阶段。 这在确保代码更改不影响测试结果或需要快速部署项目的情况下特别有用。 Maven 提供了多种方法来在构建过程中跳过测试。 为什么跳过测试&#xff1f; 加速构建&#xff1a;对于具有大量测试用例的大项…

面试(十一)

目录 一.IO多路复用 二.为什么有IO多路复用机制? 三.IO多路复用的三种实现方式 3.1 select select 函数接口 select 使用示例 select 缺点 3.2 poll poll函数接口 poll使用示例 poll缺点 3.3 epoll epoll函数接口 epoll使用示例 epoll缺点 四. 进程和线程的区别…

HCIP——堆叠技术实验配置

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

【GPT】力量训练的底层原理?

详细解读力量训练的每一个底层原理 力量训练之所以有效&#xff0c;是因为它利用了肌肉、神经系统和生物化学反应的基本机制。以下逐一详细解析&#xff0c;并解释相关概念。 1. 应力-恢复-适应理论 概念解析 应力&#xff08;Stress&#xff09;&#xff1a;指训练带来的负…

快速上手:如何开发一个实用的 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…