美文网首页mysql
mysql 表分区和自动创建新的分区

mysql 表分区和自动创建新的分区

作者: 顶尖少爷 | 来源:发表于2023-02-02 14:13 被阅读0次

1 创建新的表

CREATE TABLE `send_url_log` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `do_id` smallint(6) NOT NULL DEFAULT '0' COMMENT '标记1yak 2web',
  `source` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道',
  `send_type` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '类型',
  `push_date` int(11) COLLATE utf8mb4_general_ci NOT NULL  COMMENT '发送日期',
  `send_url` text COLLATE utf8mb4_unicode_ci COMMENT '发送url',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`,`push_date`),
  KEY `send_url_log_do_id_index` (`do_id`),
  KEY `send_url_log_source_index` (`source`),
  UNIQUE KEY `id_UNIQUE` (`id`,`push_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='上报日志表'
PARTITION BY RANGE (`push_date`)
(PARTITION p0 VALUES LESS THAN (20230201) ENGINE = InnoDB,
 PARTITION p20230202 VALUES LESS THAN (20230202) ENGINE = InnoDB,
 PARTITION p20230203 VALUES LESS THAN (20230203) ENGINE = InnoDB,
 PARTITION p20230204 VALUES LESS THAN (20230204) ENGINE = InnoDB
 ); 

2添加新的分区

 alter TABLE `send_url_log` add PARTITION(
 PARTITION p20230205 VALUES LESS THAN (20230205) ENGINE = InnoDB
);

3删除分区

alter table `send_url_log`  drop PARTITION p20230205;

4 创建存储过程

DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `send_url_log_by_day`(IN_SCHEMANAME VARCHAR(64), IN_TABLENAME VARCHAR(64))
BEGIN
    #当前日期存在的分区的个数
    DECLARE ROWS_CNT INT UNSIGNED;
    #目前日期,为当前日期的后一天
    DECLARE TARGET_DATE TIMESTAMP;
    #分区的名称,格式为p20230203
    DECLARE PARTITIONNAME VARCHAR(9);
    #当前分区名称的分区值上限,即为 PARTITIONNAME + 2
    DECLARE PARTITION_ADD_DAY VARCHAR(9);
    SET TARGET_DATE = NOW() + INTERVAL 2 DAY;
    SET PARTITIONNAME = DATE_FORMAT( TARGET_DATE, 'p%Y%m%d' );
    SET TARGET_DATE = TARGET_DATE + INTERVAL 1 DAY;
    SET PARTITION_ADD_DAY = DATE_FORMAT( TARGET_DATE, '%Y%m%d' );
    SELECT COUNT(*) INTO ROWS_CNT FROM information_schema.partitions
    WHERE table_schema = IN_SCHEMANAME AND table_name = IN_TABLENAME AND partition_name = PARTITIONNAME;
    IF ROWS_CNT = 0 THEN
        SET @SQL = CONCAT( 'ALTER TABLE `', IN_SCHEMANAME, '`.`', IN_TABLENAME, '`',
        ' ADD PARTITION (PARTITION ', PARTITIONNAME, " VALUES LESS THAN (",
            PARTITION_ADD_DAY ,") ENGINE = InnoDB);" );
        PREPARE STMT FROM @SQL;
        EXECUTE STMT;
        DEALLOCATE PREPARE STMT;
     ELSE
       SELECT CONCAT("partition `", PARTITIONNAME, "` for table `",IN_SCHEMANAME, ".", IN_TABLENAME, "` already exists") AS result;
     END IF;
END;;
DELIMITER ;


5 创建定时任务


DELIMITER $$
#该表所在的数据库名称
USE `sy_ad_game`$$
CREATE EVENT IF NOT EXISTS `daily_generate_partition`
ON SCHEDULE EVERY 1 hour   #执行周期,还有天、月等等
STARTS '2023-02-03 00:00:00'
ON COMPLETION PRESERVE
ENABLE
COMMENT 'Creating partitions'
DO BEGIN
    #调用刚才创建的存储过程,第一个参数是数据库名称,第二个参数是表名称
    CALL datacollectcenter.send_url_log_by_day('sy_ad_game','send_url_log');
END$$
DELIMITER ;


6 查看mysql是否开启了定时任务

show variables like '%event_sche%';

7 开启定时任务

set global event_scheduler=1;

8 查询定任务

SELECT event_name,event_definition,interval_value,interval_field,status

FROM information_schema.EVENTS;

查询分区信息

SELECT *
FROM information_schema.PARTITIONS WHERE PARTITION_NAME IS NOT NULL

相关文章

  • MySQL分区表

    确认mysql是否支持分区表 mysql分区表的特点 创建mysql数据表为hash表 常用mysql分区的类型 ...

  • Mysql 分区表删除

    分区表删除部分分区 使用场景:从 MySQL 5.1 开始,支持分区 创建日志表时建议使用分区方式 在上表的分区表...

  • Mysql分区表及自动创建分区

    sql语句如下,存储过程支持对指定的库、表,创建未来指定数量的分区;未定义分区定义分区;不会重复创建分区。建议使用...

  • linux 挂载磁盘与分区lvm逻辑卷

    linux磁盘分区与挂载 1.1查看分区挂载情况,命令: 1.2创建新的磁盘分区 1.3保存分区表 1.4查看创建...

  • mysql表分区

    mysql表分区主要分为RANGE分区,LIST分区,HASH分区,LINEAR HASH分区,KEY分区 目前,...

  • Mysql分区分析

    关于什么是分区和分表,可以先参考下面前两篇文章。 MySQL 分库分表与分区的区别和思考搞懂MySQL分区MySQ...

  • Mysql 分区表

    MySQL分区表支持RANGE,LIST,HASH,KEY,COLUMNS多种分区算法。 分区表的唯一索引和主键索...

  • HIVE——常用sql命令

    库 创建库 查看库 使用库 删除库 表 查看表 创建分区表 查看分区 插入分区数据 查看分区数据

  • PostgreSQL实现数据表分区

    1.建表 2.创建子表(分区表) 根据主表的创建日期月份来建立分区 3.给分区表创建主键 继承主表的分区表无法继承...

  • PHP面试之分库分表

    [TOC] 真题 简述MySQL分表操作和分区操作的工作原理,分别说说分区和分表的使用场景和各自的优缺点。 分区表...

网友评论

    本文标题:mysql 表分区和自动创建新的分区

    本文链接:https://www.haomeiwen.com/subject/bhowhdtx.html