一、使用說明:
1.此腳本為分區(qū)后,定時自動增加分區(qū).(被自動分區(qū)的表,一定要先手動分幾個區(qū))
2.每隔15天,定時器會執(zhí)行一個存儲過程,對分區(qū)日期最后的那天再往后新增15個分區(qū).
3.Script里面Auto_partitions.sql 為存儲過程
4.Script里面Timer_event.sql 為定時事件腳本
5.MySQL5.5默認(rèn)并沒有開啟EVENT機制,需要在my.cnf文件中添加[mysqld] event_scheduler= ON
7.增加打開文件上線.這個很重要.open_files_limit = 5000
二、分區(qū)腳本
1.DELIMITER ||
2.DROP PROCEDURE IF EXISTS create_Partition || 3.CREATE PROCEDURE create_Partition (IN databaseName VARCHAR(50),IN tableName VARCHAR(50)) 4.L_END:BEGIN 5. DECLARE MAX_PARTITION_DESCRIPTION VARCHAR(255) DEFAULT 0; 6. DECLARE P_NAME VARCHAR(255) DEFAULT 0; 7. DECLARE P_DESCRIPTION VARCHAR(255) DEFAULT 0; 8. DECLARE i INT DEFAULT 1; 9. DECLARE ISEXIST_PARTITION VARCHAR(255) DEFAULT 0; 10. SELECT PARTITION_NAME INTO ISEXIST_PARTITION FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName LIMIT 1 ; 11.
12. IF ISEXIST_PARTITION <=> "" THEN 13. SELECT "Partition table not is exist" AS "*****ERROR*****"; 14. LEAVE L_END;
15. END IF; 16.
17. SELECT partition_description INTO MAX_PARTITION_DESCRIPTION FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName ORDER BY partition_description DESC LIMIT 1; 18.
19.
20. IF MAX_PARTITION_DESCRIPTION <=> "" THEN 21. SELECT "Partition table is error" AS "*****ERROR*****"; 22. LEAVE L_END;
23. END IF; 24.
25.
26. SET MAX_PARTITION_DESCRIPTION = REPLACE(MAX_PARTITION_DESCRIPTION, '\'', ''); 27. WHILE i <= 15 DO
28. SET P_DESCRIPTION = adddate(MAX_PARTITION_DESCRIPTION, INTERVAL i day); 29. SET P_NAME = REPLACE(P_DESCRIPTION, '-', ''); 30. SET @S=CONCAT('ALTER TABLE ',tableName,' ADD PARTITION (PARTITION p',P_NAME,' VALUES LESS THAN (\'',P_DESCRIPTION,'\'))'); 31. SELECT @S; 32. PREPARE stmt2 FROM @S; 33. EXECUTE stmt2; 34. DEALLOCATE PREPARE stmt2; 35. SET i = i + 1 ; 36. END WHILE; 37.END L_END;|| 38.DELIMITER ;
# 其中傳入?yún)?shù)databaseName為數(shù)據(jù)庫名,參數(shù)tableName為表名.
三、添加事件處理
1.DELIMITER ||
2.CREATE EVENT auto_set_partitions 3. ON SCHEDULE 4. EVERY 15 DAY 5. DO
6. BEGIN 7. CALL create_Partition('database_name','table_name'); 8. /* 如果需要向多個表分區(qū),可以寫多個 CALL 調(diào)用
9. CALL create_Partition('database_name','table_name'); 10. */
11. END || 12.DELIMITER ;
這個事件每隔15天執(zhí)行一次
本文出自:億恩科技【www.allwellnessguide.com】
服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|