Mais conteúdo relacionado My sql event_scheduler_casual_slideshare__7. my.cnf
[mysql]
event_scheduler = ON
> SET GLOBAL
event_scheduler = ON;
※ON/OFFは1/0でもOK
MySQL Event Scheduler Casual
9. イベントの登録
● CREATE EVENT文で登録
CREATE EVENT log_do_event
ON SCHEDULED AT '2011-08-09 19:00:00'
DO INSERT INTO
event_log (event_name, created_on)
VALUES ('MySQL Casual', NOW() );
※2011/08/09 19時ちょうどに
event_logテーブルにレコードをinsertする
MySQL Event Scheduler Casual
10. ステートメントを複数
● DELIMITER を変えて BEGIN - ENDで指定すればOK
DELIMITER ||
CREATE EVENT log_do_event ON SCHEDULE EVERY 1
DAY STARTS '2011-08-09 19:00:00'
DO BEGIN
INSERT INTO event_log(event_name, created_on)
VALUES ('MySQL Casual', NOW());
UPDATE events SET done = 1 WHERE event_name =
'MySQL Casual';
END;
||
DELIMITER ;
MySQL Event Scheduler Casual
11. スケジュールの指定
● AT 'YYYY-MM-DD HH:MM:SS'
○ 指定した時間に1回限り
● EVERY 1 HOUR
○ eventを登録してから一定間隔毎に延々繰り返す
○ 時間以外にも分/日, 週なども指定可能
● EVERY 1 HOUR STARTS '時間' ENDS '時間'
○ 開始時刻と終了時刻を指定できる
○ 終了時刻指定は任意
○ STARTS や ENDS には NOW() や CURRENT_TIMESTAMP
が指定できる
○ ' + INTERVAL 15 SECOND' などしてもOK
12. イベントの変更/削除/確認
● ALTER EVENT文で変更
ALTER EVENT log_do_event
DISABLE;
● DROP EVENT文で削除
DROP EVENT log_do_event;
● 確認は下記2通り
○ INFORMATION SCHEMA.EVENTS の内容
○ use schema; SHOW EVENTS;
MySQL Event Scheduler Casual
13. レプリケーションとイベント
● CREATE EVENT 文はレプリケーションされる
○ スレーブ側でもイベントが登録されるが
「SLAVESIDE_DISABLED」設定になる
○ マスタ側は「ENABLED」設定になっている
● mysqldumpで吐かれる設定はそれぞれの設定状況に従う
○ マスタでdumpをとるとENABLEDに
○ スレーブでとるとSLAVESIDE_DISABLEDになる
MySQL Event Scheduler Casual
16. 用途(例
● partitioningした table の rotate
○ range partition table
● table から不要なデータを purge
○ range partition 以外の table
※どちらも procedure を kick して実行している
MySQL Event Scheduler Casual
20. 運用上の注意点
●設定
●日常の運用
●障害復旧
MySQL Event Scheduler Casual
21. ● マスタ/スレーブともにONにしないと
○ CREATE EVENTでこける
○ マスタ切替時にENABLEDにできない
● 基本的にマスタでのみENABLEにする
○ でないとスレーブ側で2回イベントが走って
悲しいことが起こる
○ あるいはprocedure側で判定するか...
MySQL Event Scheduler Casual
22. 日常の運用
● 設定項目を監視すべき
○ show variablesを監視(↓Nagios例)
my @results = split /n/, `$mysql -e "select @@event_schedulern"`;
my $result = $results[1];
if ($result ne 'ON') {
print "[CRITICAL]$host: check_mysql_valiables - $value : $result";
exit 2;
}
print qq([OK]$host: check_mysql_valiables - $resultn);
exit 0;
※あとENABLED/SLAVESIDE_DISABLEDの状態も
MySQL Event Scheduler Casual
23. 日常の運用
● Event が操作する対象も監視
○ Range Partitionを監視(↓例)
my $sth = $dbh->prepare("
select
count(*) count
from
information_schema.PARTITIONS
where
TABLE_SCHEMA = ?
and
TABLE_NAME = ?
and
PARTITION_DESCRIPTION > (unix_timestamp(current_timestamp) + ?)
"); ※これが1未満ならpartitionが存在しない
MySQL Event Scheduler Casual
24. 日常の運用
● Eventがちゃんと動いたか検知できない対策
○ procedureを呼ぶ前と後にlogging
DELIMITER //
CREATE EVENT rotate_partition ON SCHEDULE EVERY 1 DAY
DO BEGIN
INSERT INTO rotate_log(table_name, status, created_on) VALUES
('target_table', 'begin', NOW());
CALL add_partition();
CALL drop_partition();
INSERT INTO rotate_log(table_name, status, created_on) VALUES
('target_table', 'end', NOW());
END;
//
DELIMITER ;
※partition監視が引っかかったらここを見る
25. 障害復旧
● スレーブをマスタに昇格させるとき
○ 新マスタでENABLEDにする
○ 旧マスタはSLAVESIDE_DISABLEDに
● スレーブを追加するとき
○ SLVESIDE_DISABLEDか確認
MySQL Event Scheduler Casual
27. Event Schedulerは
● Event は正しく付き合えばいろいろできそう
○ 既に安全に運用できる枠組みがあるならそっちでも...
● cron でも Event でも適切な監視は必須
○ 適切に監視すれば Event も怖くないよ!!
○ Event でやったほうが component 減らせていい(かも
MySQL Event Scheduler Casual