当前位置: 代码网 > it编程>数据库>Mysql > MySQL按时间进行表分区的方法代码

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

2024年09月29日 Mysql 我要评论
创建按月份分区的表create table if not exists table_name( id bigint auto_increment comment '主键id',

创建按月份分区的表

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按时间表分区内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com