使用调度器的Mysql动态表分区维护程序

使用调度器的Mysql动态表分区维护程序,mysql,stored-procedures,mysql-workbench,partitioning,Mysql,Stored Procedures,Mysql Workbench,Partitioning,我创建了一个下表分区维护过程 正在处理分区表的unixtime日期列…但它不会为创建新分区 非分区表 当我调试这个过程时,我找到了分区描述的原因 对于非分区/新表显示null DELIMITER $$ CREATE DEFINER=`developer`@`%` PROCEDURE `ankit_UpdatePartitions`(dbname varchar(100), tblname varchar(100), today_date DATE, add_week INT) BEGIN

我创建了一个下表分区维护过程 正在处理分区表的unixtime日期列…但它不会为创建新分区 非分区表

当我调试这个过程时,我找到了分区描述的原因 对于非分区/新表显示null

DELIMITER $$

CREATE DEFINER=`developer`@`%` PROCEDURE `ankit_UpdatePartitions`(dbname varchar(100), 
tblname varchar(100), today_date DATE, add_week INT)
BEGIN

        DECLARE max_date date;
        DECLARE droppart_sql date;
        DECLARE new_date date;

        -- max partititon date
    --  SELECT STR_TO_DATE(MAX(from_unixtime(PARTITION_DESCRIPTION)), '''%Y-%m-%d''') 
        SELECT MAX(date(from_unixtime(PARTITION_DESCRIPTION)))
        INTO max_date
        FROM INFORMATION_SCHEMA.PARTITIONS
        WHERE TABLE_NAME=tblname AND TABLE_SCHEMA=dbname;

        -- create partitions for next future week
        if (max_date < today_date +INTERVAL add_week week)
        Then
            SET new_date := max_date + INTERVAL 1 DAY;
            SET @partition_query := CONCAT('ALTER TABLE ', tblname, ' ADD PARTITION 
                                            (
                                                PARTITION p',CAST(((new_date - INTERVAL 1 DAY)+0) as char(8)),
                                                ' VALUES LESS THAN (', unix_timestamp(new_date) , ')
                                            );'
                                         );
            PREPARE stmt FROM @partition_query;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;

    --      SELECT STR_TO_DATE(MAX(PARTITION_DESCRIPTION), '''%Y-%m-%d''')
            SELECT MAX(date(from_unixtime(PARTITION_DESCRIPTION)))
            INTO max_date
            FROM INFORMATION_SCHEMA.PARTITIONS
            WHERE TABLE_NAME=tblname
            AND TABLE_SCHEMA=dbname;

            SET max_date := new_date;
        END if;
END

我应该在代码中更新什么来为非分区和已分区表创建新的动态分区。

不明智。您应该有意地将分区添加到任何新表中—分区表并不总是明智的,以相同的方式对它们进行分区也不总是明智的。添加分区是有风险的—如果脚本未能在应该的时候运行,它似乎已经将数据放在了错误的分区中。请参阅中关于使用重组的讨论。不明智。您应该有意地将分区添加到任何新表中—分区表并不总是明智的,以相同的方式对它们进行分区也不总是明智的。添加分区是有风险的—如果脚本未能在应该的时候运行,它似乎已经将数据放在了错误的分区中。请参阅中关于使用重组的讨论。