MySQL がパーティションを作成した後、場合によってはパーティションを自動的に作成する必要があります。たとえば、一部のテーブルのデータ量が非常に多く、一部のデータがホット データである場合、日付でパーティション分割した後も業務量が継続しており、再度パーティションを作成するのに時間がかかります。プログラマとして、これを手動で作成するのは耐えられません。
まず、パーティションを自動的に追加できるストアド プロシージャを作成します (パーティションを自動的に削除する必要がある場合は、この記事も適用されます)。
DELIMITER $$
USE `me`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_schedule_log_partition`()
BEGIN
set @pname = concat('p',date_format(curdate(),'%Y%m%d'));
set @nexttodays = to_days(date_add(curdate(), INTERVAL 1 DAY));
set @executeStr = concat('alter table s_schedule_log add partition (PARTITION ', @pname, ' VALUES LESS THAN (', @nexttodays, ' ))');
prepare stmt from @executeStr;
execute stmt;
deallocate prepare stmt;
select @executeStr;
END$$
DELIMITER ;
;
ストアドプロシージャは手動で呼び出すことができますが、問題ありませんか? 次に、時間制限のあるタスクを書きます
DELIMITER ||
CREATE EVENT add_schedule_log_partition_event
ON SCHEDULE
EVERY 1 day STARTS '2022-05-15 01:00:00'
DO
BEGIN
call `me`.`add_schedule_log_partition`;
END ||
DELIMITER ;
注: スケジュールされたタスクでは、event_scheduler パラメーターを有効にする必要があります。ステータスを表示するには、sql: show 変数 ('%schedule%' など) を使用してください。
タスクステータスを有効にする: グローバルevent_scheduler = 'ON'を設定します。