mariadb:分区自动创建与删除
参考文章:https://blog.csdn.net/xlxxcc/article/details/52486426
1.以日自动创建与删除分区
调用示例:CALL proc_day_partition('t_base_log_abnormal',180,1);
删除180天之前的分区
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_day_partition`(
IN `v_tablename` VARCHAR(50),
IN `v_drop_interval` INT,
IN `v_add_interval` INT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE v_add_interval_1 int;
DECLARE flag int default 0;
SET v_add_interval_1=v_add_interval+1;
START TRANSACTION;
-- 自动创建今日分区
select count(0) into flag from INFORMATION_SCHEMA.partitions
WHERE TABLE_SCHEMA = schema() AND TABLE_Name=v_tablename
and partition_name=CONCAT('p',DATE_FORMAT(NOW(),'%Y%m%d'));
if flag = 0 then
SET @t=CONCAT('alter table ',v_tablename,' add partition ','(','partition ',
CONCAT('p',DATE_FORMAT(now(),'%Y%m%d')),
' VALUES LESS THAN (TO_DAYS (''',DATE_FORMAT(date_add(now(),interval v_add_interval day),'%Y%m%d'),''')))');
SELECT @t;
PREPARE stmt FROM @t;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end if;
-- 删除过期分区
if v_drop_interval > 0 then
select count(0) into flag from INFORMATION_SCHEMA.partitions
WHERE TABLE_SCHEMA = schema() AND TABLE_Name=v_tablename
and partition_name=CONCAT('p',DATE_FORMAT(DATE_SUB(NOW(),INTERVAL v_drop_interval DAY),'%Y%m%d'));
if flag = 1 then
SET @s=CONCAT('alter table ',v_tablename,' drop partition ', CONCAT('p',DATE_FORMAT(DATE_SUB(NOW(),INTERVAL v_drop_interval DAY),'%Y%m%d')));
SELECT @s;
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end IF;
end if;
-- 自动创建明天分区
select count(0) into flag from INFORMATION_SCHEMA.partitions
WHERE TABLE_SCHEMA = schema() AND TABLE_Name=v_tablename
and partition_name=CONCAT('p',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL v_add_interval DAY),'%Y%m%d'));
if flag = 0 then
SET @t=CONCAT('alter table ',v_tablename,' add partition ','(','partition ',
CONCAT('p',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL v_add_interval DAY),'%Y%m%d')),
' VALUES LESS THAN (TO_DAYS (''',DATE_FORMAT(date_add(now(),interval v_add_interval_1 day),'%Y%m%d'),''')))');
SELECT @t;
PREPARE stmt FROM @t;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end IF;
COMMIT;
END
上述脚本,在原文的基础上做了优化,主要是判断分区是否存在,删除一个不存在的分区会发生错误;自动创建今日的分区;判断是否要删除分区等等。
CREATE DEFINER=`root`@`localhost` EVENT `event_partition`
ON SCHEDULE
EVERY 1 DAY STARTS '2018-09-17'
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT ''
DO BEGIN
CALL proc_add_drop_partition('t_base_log',0,1);
CALL proc_add_drop_partition('t_gps',60,1);
END
创建事件,执行存储过程。
2.以月自动创建和删除分区
调用示例:CALL proc_month_partition('t_base_log_abnormal',0,1);
不删除分区
CREATE DEFINER=`root`@`%` PROCEDURE `proc_month_partition`(
IN `v_tablename` VARCHAR(50),
IN `v_drop_interval` INT,
IN `v_add_interval` INT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
-- 创建月分区
-- v_tablename:分区表名
-- v_drop_interval:过期天数,为0表示不删除分区
-- v_add_interval :创建分区间隔,以月单位 DECLARE v_add_interval_1 int;
DECLARE flag int default 0;
SET v_add_interval_1=v_add_interval+1;
START TRANSACTION;
-- 自动创建当月分区
select count(0) into flag from INFORMATION_SCHEMA.partitions
WHERE TABLE_SCHEMA = schema() AND TABLE_Name=v_tablename
and partition_name=CONCAT('p',DATE_FORMAT(NOW(),'%Y%m'));
if flag = 0 then
SET @t=CONCAT('alter table ',v_tablename,' add partition ','(','partition ',
CONCAT('p',DATE_FORMAT(now(),'%Y%m')),
' VALUES LESS THAN (TO_DAYS (''',DATE_FORMAT(date_add(now(),interval v_add_interval MONTH),'%Y%m%d'),''')))');
SELECT @t;
PREPARE stmt FROM @t;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end if;
-- 删除过期分区
if v_drop_interval > 0 then
select count(0) into flag from INFORMATION_SCHEMA.partitions
WHERE TABLE_SCHEMA = schema() AND TABLE_Name=v_tablename
and partition_name=CONCAT('p',DATE_FORMAT(DATE_SUB(NOW(),INTERVAL v_drop_interval DAY),'%Y%m01'));
if flag = 1 then
SET @s=CONCAT('alter table ',v_tablename,' drop partition ', CONCAT('p',DATE_FORMAT(DATE_SUB(NOW(),INTERVAL v_drop_interval DAY),'%Y%m')));
SELECT @s;
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end IF;
end if;
-- 自动创建下月分区
select count(0) into flag from INFORMATION_SCHEMA.partitions
WHERE TABLE_SCHEMA = schema() AND TABLE_Name=v_tablename
and partition_name=CONCAT('p',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL v_add_interval MONTH),'%Y%m'));
if flag = 0 then
SET @t=CONCAT('alter table ',v_tablename,' add partition ','(','partition ',
CONCAT('p',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL v_add_interval DAY),'%Y%m')),
' VALUES LESS THAN (TO_DAYS (''',DATE_FORMAT(date_add(now(),interval v_add_interval_1 MONTH),'%Y%m01'),''')))');
SELECT @t;
PREPARE stmt FROM @t;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end IF;
COMMIT;
END
mariadb:分区自动创建与删除的更多相关文章
- CentOS7 下 swap 分区的创建、删除及相关配置
一般我们在购买云服务器(例如:阿里云ECS.腾讯云服务器)的时候,选择 CentOS 7 系统之后,登录系统,发现 swap 大小为 0(即没有分配). 如果我们想在该 服务器上安装 Oracle 数 ...
- mdev自动创建和删除设备节点
设备节点的创建有二种方法: 1)手动创建:mknode命令 当insmod后,还需要手动moknod创建设备节点才能被应用层打开,并且使用完成之后还要删除节点. 2) 自动创建:mdev mdev, ...
- 使用class 自动创建设备节点
#include <linux/init.h>// __init __exit #include <linux/module.h> // module_init module_ ...
- Hive管理表分区的创建,数据导入,分区的删除操作
Hive分区和传统数据库的分区的异同: 分区技术是处理大型数据集经常用到的方法.在Oracle中,分区表中的每个分区是一个独立的segment段对象,有多少个分区,就存在多少个相应的数据库对象.而在P ...
- MariaDB(MySQL)创建、删除、选择及数据类型使用详解
一.MariaDB简介(MySQL简介略过) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行 ...
- oracle11g interval(numtoyminterval())自动创建表分区
Oracle11g通过间隔分区实现按月创建表分区 在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不 ...
- EntityFramework SQLiteCodeFirst 自动创建数据库 关闭级联删除
外键的级联删除: 如A表中有主键idA, B表中设置外键(ForeignKey)为A表中的主键idA, 当A表中的记录被删除时, B表中所有引用此条记录的记录(即所有外键为idA的记录)将自动被删除 ...
- sql2008 计划自动创建数据库分区【转】
本文转自:http://jingyan.baidu.com/article/6b97984d9a26ec1ca3b0bf77.html sql2008 计划自动创建数据库分区 固定增量的数据,自动创建 ...
- 大数据_Kafka_Kafka自动创建不存在的Topics / 删除已存在的Topics
大数据_Kafka_Kafka自动创建不存在的Topics / 删除已存在的Topics 2016年10月11日 18:22:59 高达一号 阅读数:8655 版权声明:本文为博主原创文章,未经博 ...
随机推荐
- idea整合SVN以及SVN的使用
idea整合SVN以及SVN的使用: 1:下载插件: 运行并安装: 安装后的目录: 2-1 打开bin目录 :复制svn.exe的文件路径: 2:打开IDEA的File-->setting: o ...
- html 表格边线设置
<table rules="all" style="margin-left: auto; margin-right: auto; margin-top: 50px; ...
- vertica系列:时间相关函数
-- * 注意: 本文的SQL是在 2017-09-14 测试的. 所以如果取当前日期, 结果为 2017-09-14* ------------------------------ 相关数据类型 - ...
- overflow:auto学习
一直认为没认为这个属性没什么大的用处,最近在使用一次iscroll时一直浮动到顶部层上面找了半天,发现可以用这个属性解决. 1.功能1,清除浮动.设置overflow并不会在该元素上清除浮动,它将清除 ...
- Emmet 记录
Refs 熟悉 css 有优势,emmet 的的缩写语法特别像 css 选择器. =>参考本博笔记 # id > 直接子元素 child . class + Sibling 同级相邻的一个 ...
- 002_Add Two Numbers
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # sel ...
- 2017ICPC南宁 M题 The Maximum Unreachable Node Set【二分图】
题意: 找出不能相互访问的点集的集合的元素数量. 思路: 偏序集最长反链裸题. 代码: #include<iostream> #include<cstring> using n ...
- Ant 与jemter的结合--批量执行jmeter脚本
一.Ant 介绍&作用: Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发. 作用:打包,部署,运行Java工程 二.下 ...
- 【节点-添加标签】【节点-删除标签】【显示年-月-日-星期】【math算数】【正则表达式】
1.节点-添加标签 <body><div id="div1"><p id="p1">这是一个段落.</p>< ...
- Javascript入门(三)函数
Javascript函数 一.函数定义与执行 <script type="text/javascript"> //define function fun1(){ ale ...