iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql 中怎么定时添加删除历史分区
  • 925
分享到

mysql 中怎么定时添加删除历史分区

2024-04-02 19:04:59 925人浏览 泡泡鱼
摘要

Mysql 中怎么定时添加删除历史分区,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 新建表CREATE TABLE `p

Mysql 中怎么定时添加删除历史分区,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1. 新建表

CREATE TABLE `perf_biz_vm_new` (

           `CREATE_TIME` datetime NOT NULL COMMENT '性能采集时间',

           `VM_ID` varchar(80) NOT NULL COMMENT '虚拟机ID',

            `PROCESSOR_USED` varchar(100) DEFAULT NULL COMMENT 'CPU利用率(%)',

            `MEM_USED` varchar(100) DEFAULT NULL COMMENT '内存的使用率(%)',

            `MEM_UTILITY` varchar(100) DEFAULT NULL COMMENT '可用内存量(bytes)',

            `BYTES_IN` varchar(100) DEFAULT NULL COMMENT '流入流量速率(Mbps)',

            `BYTES_OUT` varchar(100) DEFAULT NULL COMMENT '流出流量速率(Mbps)',

            `PROC_RUN` varchar(100) DEFAULT NULL COMMENT 'CPU运行队列中进程个数',

            `WRITE_io` varchar(100) DEFAULT NULL COMMENT '虚拟磁盘写入速率(Mb/s)',

            `READ_IO` varchar(100) DEFAULT NULL COMMENT '虚拟磁盘读取速率(Mb/s)',

            `PID` varchar(36) NOT NULL,

             PRIMARY KEY (`PID`,`CREATE_TIME`),

             KEY `mytable_cateGoryid` (`CREATE_TIME`) USING BTREE,

             KEY `perf_biz_vm_vm_id_create_time` (`VM_ID`,`CREATE_TIME`)

 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='虚拟机性能采集表'

 

2. 更换表名

 rename table perf_biz_vm to perf_biz_vm_old;

rename table perf_biz_vm_new to perf_biz_vm;

3. 把最近2天的数据插入到新表里面.

#!/bin/bash

function insert(){

end_time="$1 $2"

start_time="$3 $4"

mysql -u'user' -p'passwd' << !

use monitor_alarm_openstack;

set innodb_flush_log_at_trx_commit=0;

start transaction;

insert into perf_biz_vm select * from perf_biz_vm_old where create_time < '$end_time' and create_time > '$start_time';

commit;

select TABLE_ROWS from infORMation_schema.tables where TABLE_SCHEMA ="monitor_alarm" and TABLE_NAME="perf_biz_vm";

!

}

base_time="2018-02-27 2:00:00"

while true

do

        #end_time=$(date -d "-1hour $base_time" +%Y-%m-%d" "%H:%M:%S)

        end_time=$base_time

        start_time=$(date -d "-1hour $end_time" +%Y-%m-%d" "%H:%M:%S)

        #base_time=$end_time

        base_time=$start_time

        echo "Cur_time: $(date +%Y%m%d" "%H%M%S)" | tee -a 1.log

        echo "Range: $end_time $start_time" | tee -a 1.log

        insert ${end_time} ${start_time} | tee -a 1.log

        sleep 2

done

4.编写存储过程用于定期创建新的分区,并删除几天前旧的分区

代码如下:

delimiter $$

CREATE  PROCEDURE clean_partiton(SCHEMANAME VARCHAR(64), TABLENAME VARCHAR(64),reserve INT)

BEGIN

      -- 注:该储存过程适用于分区字段类型为datetime,按天分区且命名为p20180301格式规范的分区表

--     获取最旧一个分区,判断是否为reserve天前分区,是则进行删除,每次只删除一个分区

--     提前创建14天分区,判断命名不重复则创建

--     创建 history_partition 表,varchar(200)和datetime类型。记录执行成功的sql语句

        DECLARE PARTITION_NAMES VARCHAR(16);    

        DECLARE OLD_PARTITION_NAMES VARCHAR(16); 

        DECLARE LESS_THAN_TIMES varchar(16);     

        DECLARE CUR_TIME INT;                  

        DECLARE RETROWS INT;

        DECLARE DROP_PARTITION VARCHAR(16);

SET CUR_TIME = DATE_FORMAT(NOW(),'%Y%m%d');

        BEGIN

        SELECT PARTITION_NAME INTO DROP_PARTITION FROM information_schema.partitions WHERE table_schema = SCHEMANAME AND table_name = TABLENAME order by PARTITION_ORDINAL_POSITION  asc limit 1 ;

        IF SUBSTRING(DROP_PARTITION,2) < DATE_FORMAT(CUR_TIME - INTERVAL reserve DAY, '%Y%m%d') THEN

SET @sql = CONCAT( 'ALTER TABLE ', SCHEMANAME, '.', TABLENAME, ' drop PARTITION ', DROP_PARTITION, ';' );

        PREPARE STMT FROM @sql;

        EXECUTE STMT;

        DEALLOCATE PREPARE STMT;

        INSERT INTO history_partition VALUES (@sql, now());

END IF;

        end;

        SET @__interval = 1;

        create_loop: LOOP

                IF @__interval > 15 THEN

                        LEAVE create_loop;

                END IF;

                SET LESS_THAN_TIMES = DATE_FORMAT(CUR_TIME + INTERVAL @__interval DAY, '%Y%m%d');

                SET PARTITION_NAMES = DATE_FORMAT(CUR_TIME + INTERVAL @__interval -1 DAY, 'p%Y%m%d');

                IF(PARTITION_NAMES != OLD_PARTITION_NAMES) THEN

                     SELECT COUNT(1) INTO RETROWS FROM information_schema.partitions WHERE table_schema = SCHEMANAME AND table_name = TABLENAME AND LESS_THAN_TIMES <= substring(partition_description,2,8) ;

                     IF  RETROWS = 0 THEN

                     SET @sql = CONCAT( 'ALTER TABLE ', SCHEMANAME, '.', TABLENAME, ' ADD PARTITION (PARTITION ', PARTITION_NAMES, ' VALUES LESS THAN ( "',LESS_THAN_TIMES, '" ));' );

                     PREPARE STMT FROM @sql;

                     EXECUTE STMT;

                     DEALLOCATE PREPARE STMT;

INSERT INTO history_partition VALUES (@sql, now());

                     END IF;

                END IF;

                SET @__interval=@__interval+1;

                SET OLD_PARTITION_NAMES = PARTITION_NAMES;

        END LOOP;

END

$$

delimiter ;

Step 5:创建名称为clean_perf_biz_vm的事件,并在每天凌晨00:30:00的时候调用clean_partition存储过程创建下一个新分区,并删除两天前的旧分区。

delimiter |

CREATE DEFINER=’root’@’localhost’ event clean_perf_biz_vm on schedule every 1 day starts DATE_ADD(DATE_ADD(CURDATE(),INTERVAL 1 DAY),INTERVAL 30 MINUTE)

ON COMPLETION PRESERVE

do

begin

call clean_partition(‘monitor_alarm’,’perf_biz_vm’,’2’);

end |

delimiter;

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: mysql 中怎么定时添加删除历史分区

本文链接: https://www.lsjlt.com/news/56344.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql 中怎么定时添加删除历史分区
    mysql 中怎么定时添加删除历史分区,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 新建表CREATE TABLE `p...
    99+
    2024-04-02
  • Linux系统中添加删除分区命令是什么
    小编给大家分享一下Linux系统中添加删除分区命令是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在Linux系统中如果要添加删除分区可以使用fdisk命令,执行命令之后系统会有提示,只需要根据系统提示一步一步的操作。...
    99+
    2023-06-28
  • mysql怎么给表添加分区
    要给表添加分区,可以使用ALTER TABLE语句来实现。以下是一个示例: ALTER TABLE table_name PARTI...
    99+
    2024-04-09
    mysql
  • Linux中怎么删除分区
    这篇文章主要介绍了Linux中怎么删除分区的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux中怎么删除分区文章都会有所收获,下面我们一起来看看吧。使用 GParted 删除磁盘分区 (GUI 方法)作为一...
    99+
    2023-06-27
  • Git中怎么添加和删除文件
    本篇内容介绍了“Git中怎么添加和删除文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!添加文件添加文件的方式非常简单,只需使用 Git 的...
    99+
    2023-07-05
  • Ajax中怎么添加与删除数据
    Ajax中怎么添加与删除数据,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码如下:<html> <head> <...
    99+
    2024-04-02
  • 怎么在Linux中删除分区
    本篇内容介绍了“怎么在Linux中删除分区”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!管理分区是一件严肃的事情,尤其是当你不得不删除它们时...
    99+
    2023-06-15
  • 怎么在python中添加和删除列表
    怎么在python中添加和删除列表?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络...
    99+
    2023-06-14
  • SQLServer 中怎么实现分区增加和删除算法
    本篇文章为大家展示了SQLServer 中怎么实现分区增加和删除算法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先是将一个数据表加入到分区表的方法: [dbo]...
    99+
    2024-04-02
  • MySQL5.7中MHA怎么添加或删除slave节点
    这篇文章主要讲解了“MySQL5.7中MHA怎么添加或删除slave节点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL5.7中MHA怎么添加或删除...
    99+
    2024-04-02
  • windows中怎么添加和删除静态路由
    windows中怎么添加和删除静态路由,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。windows以管理员身份打开命令行,添加一条永久静态路由PS C:\Windows\s...
    99+
    2023-06-04
  • oracle数据库中怎么添加修改删除行
    oracle数据库中怎么添加修改删除行,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。向表中添加行:INSERT语句勇于向表中添...
    99+
    2024-04-02
  • MySQL中怎么指定行添加数据
    在MySQL中,要指定行添加数据,可以使用INSERT INTO语句。以下是使用INSERT INTO语句指定行添加数据的示例: I...
    99+
    2023-10-22
    MySQL
  • Linux中怎么定时删除过期文件
    本篇文章为大家展示了Linux中怎么定时删除过期文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在linux下删除过期文件,很简单,用如下命令:代码如下:find /var/www/ -type ...
    99+
    2023-06-13
  • CentOS中怎么手动增加和删除swap区
    本篇文章给大家分享的是有关CentOS中怎么手动增加和删除swap区,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SWAP是Linux中的虚拟内存,用于扩充物理内存不足而用来存...
    99+
    2023-06-10
  • Linux中怎么使用groupdel命令添加或删除组
    这篇文章给大家介绍Linux中怎么使用groupdel命令添加或删除组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。groupadd指定群组名称来建立新的群组账号,需要时可以从系统中取得新的群组值。此命令的适用范围:R...
    99+
    2023-06-05
  • 怎么在Mysql中删除指定时间值之前的记录
    这篇文章给大家介绍怎么在Mysql中删除指定时间值之前的记录,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先删除2天以前记录的SQL语句(webserver_monitormemor...
    99+
    2024-04-02
  • MySQL中怎么创建和删除临时表
    这篇文章将为大家详细讲解有关MySQL中怎么创建和删除临时表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 1.介绍: MySQL临时表,属于sessi...
    99+
    2024-04-02
  • 怎么在linux中添加每天定时任务
    今天就跟大家聊聊有关怎么在linux中添加每天定时任务,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个...
    99+
    2023-06-10
  • Partition table分区表删除分区数据时导致索引失效怎么办
    小编给大家分享一下Partition table分区表删除分区数据时导致索引失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作