Mysql不能自動創建分區,需要使用mysql event事件的方式自動創建分區,今天主要分享一下在MYSQL資料庫應如何實現自動創建分區。
CREATE TABLE `t1` ( `id` bigint(20) NOT NULL COMMENT &39;, `insert_user` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT &39;, `insert_date` datetime NOT NULL COMMENT &39;, PRIMARY KEY (`id`,insert_date) USING BTREE, KEY `fsl_idx_order_release_insert_date` (`insert_date`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT=&39;/*!50500 PARTITION BY RANGE COLUMNS(insert_date)( PARTITION p202007 VALUES LESS THAN (&39;) ENGINE = InnoDB, PARTITION p202008 VALUES LESS THAN (&39;) ENGINE = InnoDB) */insert into t1 values (1,&39;,now()),(1,&39;,now()+1),(1,&39;,now()+2);
每次執行先校驗當前分區是否存在,如果存在則不處理;不存在則創建
DELIMITER //39;p%Y%m&39;ALTER TABLE `&39;`.`&39;`&39; ADD PARTITION (PARTITION &34; VALUES LESS THAN (&34;, ENDTIME_DATETIME, &39;) ENGINE = InnoDB);&34;partition `&34;` for table `&34;.&34;` already exists&34;ycdb&34;t1&該表所在的資料庫名稱USE `ycdb`$$CREATE EVENT IF NOT EXISTS `Month_partition_t1`ON SCHEDULE EVERY 1 hour 39;2020-08-10 17:00:00&39;Creating partitions By month&調用剛才創建的存儲過程,第一個參數是資料庫名稱,第二個參數是表名稱 CALL ycdb.create_partition_by_month(&34;, &34;);END$$DELIMITER ;
如果沒有執行,請檢查Mysql是否開啟了event(默認是關閉的)
[mysqld] event_scheduler=ON
後面會分享更多devops和DBA方面內容,感興趣的朋友可以關注下~