MySQL按时间进行表分区的方法代码

 更新时间:2024年09月29日 10:47:56   作者:逢生博客  
本文介绍如何在MySQL中创建按月份分区的表,并通过修改配置文件或使用数据库事件来实现自动分区,文中通过代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考借鉴价值,需要的朋友可以参考下

创建按月份分区的表

create table if not exists table_name
(
    id          bigint auto_increment comment '主键id',
    
    create_by   varchar(64)                        not null comment '创建者',
    create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
    update_by   varchar(64)                        null comment '更新者',
    update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',
    primary key (id, create_time)
)
    comment '测试表名' partition by range (TO_DAYS(create_time)) (
    partition P202401 values less than (TO_DAYS('2024-02-01')) ,
    partition P202402 values less than (TO_DAYS('2024-03-01')) ,
    partition P202403 values less than (TO_DAYS('2024-04-01')) ,
    partition P202404 values less than (TO_DAYS('2024-05-01'))
);

开启数据库事件

临时配置(服务重启会失效)

-- 开启事件
SET GLOBAL event_scheduler = ON;
-- 查看事件是否开启
SHOW VARIABLES LIKE '%event_sche%';

修改my.cnf文件(推荐)

  • 进入MySQL所在的服务器
sudo vi /etc/my.cnf
  • 找到 [mysqld],添加如下内容
event_scheduler = ON
  • 重启 MySQL 服务以使更改生效
sudo systemctl restart mysqld

定时事件自动建分区

  • 例:提前创建下个月的分区,如2024-04-01创建5月份的分区 P202405,2024-05-01创建6月份的分区。
create event event_create_partition on schedule
    every '1' MONTH starts '2024-04-01 00:00:00'
    on completion preserve
    enable 
    do 
    BEGIN
    
    	-- 当前时间 2024-04-01 00:00:00
		-- _DATE = 2024-05-01
    	DECLARE _DATE VARCHAR(10) DEFAULT ADDDATE(SUBDATE(CURDATE(), DAY(CURDATE()) - 1), INTERVAL 1 MONTH);
    	-- P202405
    	SET @PARTITION_NAME = CONCAT('P', DATE_FORMAT(_DATE, '%Y%m'));
    	-- 2024-06-01
    	SET @SHEAR_DATE = CONCAT('', ADDDATE(LAST_DAY(_DATE), 1));
    	
        SET @SQL = CONCAT('ALTER TABLE table_name ADD PARTITION (PARTITION ', @PARTITION_NAME, ' VALUES LESS THAN (TO_DAYS("', @SHEAR_DATE, '")))');
        PREPARE STMT FROM @SQL;
        EXECUTE STMT;
        DEALLOCATE PREPARE STMT;

    END;

注意: 数据库event_scheduler = ON 要确认有开启,否则 event_create_partition 事件不会执行。

  • 查看所有事件
SHOW EVENTS;

查询表分区信息

SELECT
   TABLE_SCHEMA,
   TABLE_NAME,
   PARTITION_NAME,
   PARTITION_METHOD,
   PARTITION_EXPRESSION,
   SUBPARTITION_NAME,
   SUBPARTITION_METHOD,
   SUBPARTITION_EXPRESSION
FROM information_schema.partitions
WHERE TABLE_SCHEMA = '数据库名'
AND TABLE_NAME IN ('table_name')
ORDER BY PARTITION_NAME DESC;

总结 

到此这篇关于MySQL按时间进行表分区的文章就介绍到这了,更多相关MySQL按时间表分区内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL存储引擎 InnoDB与MyISAM的区别

    MySQL存储引擎 InnoDB与MyISAM的区别

    InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。
    2014-03-03
  • Linux(Ubuntu)下Mysql5.6.28安装配置方法图文教程

    Linux(Ubuntu)下Mysql5.6.28安装配置方法图文教程

    这篇文章主要为大家详细介绍了Linux(Ubuntu)下Mysql5.6.28安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Mysql主从GTID与binlog如何使用

    Mysql主从GTID与binlog如何使用

    MySQL的GTID和binlog是实现高效数据复制和恢复的重要机制,GTID保证事务的唯一标识,避免复制冲突;binlog记录数据变更,用于主从复制和数据恢复,两者配合,提高MySQL复制的准确性和管理便捷性
    2024-10-10
  • MySQL大小写敏感的注意事项

    MySQL大小写敏感的注意事项

    MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。如果你稍加不注意就会出现在本机开发的程序运行一切正常,发布到服务器行就出现表名找不到的问题,一头雾水。
    2021-05-05
  • 安装mysql-8.0.19-winx64遇到的问题:Can''t create directory ''xxxx\Database\''

    安装mysql-8.0.19-winx64遇到的问题:Can''t create directory ''xxxx\Da

    这篇文章主要介绍了安装mysql-8.0.19-winx64遇到的坑 ,Can't create directory 'xxxx\Database\',非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • MySQL执行时间的查询

    MySQL执行时间的查询

    这篇文章主要介绍了MySQL执行时间的查询,查询频繁的数据库和查询执行时间长的sql,文章中有详细的代码实例,感兴趣的同学可以参考阅读
    2023-04-04
  • Lost connection to MySQL server during query的解决

    Lost connection to MySQL server during query的解决

    经常在执行sql语句时,会发现这个问题,一般就是连接mysql数据库不稳定
    2008-06-06
  • MySQL索引详细解析

    MySQL索引详细解析

    索引是有双面性的,合理的建立索引可以提高数据库的效率。但是如果没有合理的构建索引和使用索引,可能会导致索引失效或者影响数据库性能,这篇文章主要介绍了MySql索引原理与操作
    2022-10-10
  • MySQL中MTR的概念

    MySQL中MTR的概念

    这篇文章主要介绍了MySQL中MTR的概念,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-11-11
  • RPM方式安装MySQL5.6源码

    RPM方式安装MySQL5.6源码

    这篇文章主要为大家分享了RPM方式安装MySQL5.6源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10

最新评论