2015年4月22日水曜日
mysql の procedure(プロシージャ)で add partition
サンプルテーブル log。主キーは id 一つ。
create table log ( id bigint not null auto_increment, message text , created_at int not null, primary key (id) ) engine = InnoDB;このままだとパーティション作成できないので主キーをいじる
alter table log modify id bigint not null, drop primary key; alter table log add primary key (id, created_at), modify id bigint not null auto_increment;パーティションを 1つ追加しとく。
alter table log partition by range (created_at) ( partition pmin values less than (0) );プロシージャを作って 3年分のパーティション追加。
drop procedure if exists add_monthly_partition; delimiter // create procedure add_monthly_partition( in table_name text, in date_func text, in years int) begin select now() into @d; select date_add(@d, interval years year) into @last; while @d < @last do select concat( 'alter table ', table_name, ' add partition (partition p', date_format(@d, '%Y%m'), ' values less than (', date_func, '(''', date_format(@d, '%Y-%m-01'), ''')))' ) into @ddl; select @ddl; prepare stmt from @ddl; execute stmt; deallocate prepare stmt; select date_add(@d, interval 1 month) into @d; end while; end // delimiter ; call add_monthly_partition('log', 'unix_timestamp', 3);
登録:
投稿 (Atom)