mysql自动分区
来源:互联网 发布:制表格用什么软件 编辑:程序博客网 时间:2024/05/16 12:11
1、建立分区表
create table test_log(created datetime,msg varchar(2000))partition by range columns(created)(partition p20150301 values less than('2015-03-02'));
2、增加分区的命令
alter table test_log add partition (partition p20150302 values less than('2015-03-03'));
3、删除分区的命令
alter table test_log drop partition p20150301;
4、查询分区信息
SELECT partition_name, cast(replace(partition_description, '''', '') AS date) AS val FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'test_log' AND TABLE_SCHEMA = 'test';+----------------+------------+| partition_name | val |+----------------+------------+| p20150302 | 2015-03-03 |+----------------+------------+1 row in set (0.01 sec)
5、建立proc维护分区
delimiter $$DROP PROCEDURE IF EXISTS proc_test_log_pt$$CREATE PROCEDURE proc_test_log_pt()BEGIN DECLARE v_sysdate date; DECLARE v_mindate date; DECLARE v_maxdate date; DECLARE v_pt varchar(20); DECLARE v_maxval varchar(20); DECLARE i int; /*增加新分区*/ SELECT max(cast(replace(partition_description, '''', '') AS date)) AS val INTO v_maxdate FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'test_log' AND TABLE_SCHEMA = 'test'; set v_sysdate = sysdate(); WHILE v_maxdate <= (v_sysdate + INTERVAL 7 DAY) DO SET v_pt = date_format(v_maxdate ,'%Y%m%d'); SET v_maxval = date_format(v_maxdate + INTERVAL 1 DAY, '%Y-%m-%d'); SET @sql = concat('alter table test_log add partition (partition p', v_pt, ' values less than(''', v_maxval, '''))'); -- SELECT @sql; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET v_maxdate = v_maxdate + INTERVAL 1 DAY; END WHILE; /*删除旧分区*/ SELECT min(cast(replace(partition_description, '''', '') AS date)) AS val INTO v_mindate FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'test_log' AND TABLE_SCHEMA = 'test'; WHILE v_mindate <= (v_sysdate - INTERVAL 6 DAY) DO SET v_pt = date_format(v_mindate - INTERVAL 1 DAY,'%Y%m%d'); SET @sql = concat('alter table test_log drop partition p', v_pt); -- SELECT @sql; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET v_mindate = v_mindate + INTERVAL 1 DAY; END WHILE;END$$delimiter ;
6、调用proc
执行前
mysql> select partition_name,partition_description FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='test_log' AND TABLE_SCHEMA='test'; +----------------+-----------------------+| partition_name | partition_description |+----------------+-----------------------+| p20150301 | '2015-03-02' |+----------------+-----------------------+1 row in set (0.01 sec)mysql> select sysdate();+---------------------+| sysdate() |+---------------------+| 2015-03-09 15:12:59 |+---------------------+1 row in set (0.00 sec)
执行后
mysql> call proc_test_log_pt;Query OK, 0 rows affected (1.13 sec)mysql> select partition_name,partition_description FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='test_log' AND TABLE_SCHEMA='test'; +----------------+-----------------------+| partition_name | partition_description |+----------------+-----------------------+| p20150303 | '2015-03-04' || p20150304 | '2015-03-05' || p20150305 | '2015-03-06' || p20150306 | '2015-03-07' || p20150307 | '2015-03-08' || p20150308 | '2015-03-09' || p20150309 | '2015-03-10' || p20150310 | '2015-03-11' || p20150311 | '2015-03-12' || p20150312 | '2015-03-13' || p20150313 | '2015-03-14' || p20150314 | '2015-03-15' || p20150315 | '2015-03-16' || p20150316 | '2015-03-17' |+----------------+-----------------------+14 rows in set (0.01 sec)
也可以这样执行
mysql -uroot -p3306 test -e 'call proc_test_log_pt'
7、可以在mysql的event或os的crontab中调用上面的proc
以event为例
需要先开启event
mysql> set global event_scheduler=1;Query OK, 0 rows affected (0.00 sec)mysql> show variables like '%event_scheduler';+-----------------+-------+| Variable_name | Value |+-----------------+-------+| event_scheduler | ON |+-----------------+-------+1 row in set (0.00 sec)
DELIMITER $$drop event if exists auto_pt $$create event auto_pton scheduleevery 1 minutestarts '2015-03-09 15:19:02'doBEGIN call proc_test_log_pt();END$$delimiter ;
你可以重建前面所述的分区表,然后看event执行的效果
0 0
- mysql的自动分区
- mysql自动分区
- mysql 自动分区实践
- MySQL自动分区脚本
- mysql自动分区自动清理
- mysql自动分区存储过程
- mysql自动分区应用实例
- mysql自动建表分区
- MYSQL-- 每半月一个分区,自动维护
- MySQL-- 每半月一个分区,自动维护
- MySQL-- 每半月一个分区,自动维护
- MYSQL-- 每半月一个分区,自动维护
- MySQL-- 每半月一个分区,自动维护
- mysql分区表,循环分区,触发器自动删除
- mysql自动按时间分区实例
- MySQL和ORACLE每天自动增加分区
- mysql按天分区-自动增加分区
- MYSQL-- 每半月一个分区,自动维护 MYSQL-- 每半月一个分区,自动维护
- cocoapods 3
- POJ3187---Backward Digit Sums
- 学习 Linux LVM
- 【图像处理】【去模糊】图像去模糊的原理
- 安卓的Application介绍
- mysql自动分区
- iOS 网络编程 TCP/UDP HTTP
- windows 上 怎样编译 php 和 xdebug的 源代码
- Oracle 日期加减运算
- 安装Scrapy
- 【数据库学习】使用视图
- 贪心算法
- NFC功能开发
- 191Number of 1 Bits