Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

My sql event_scheduler_casual_slideshare__

15,832 views

Published on

MySQL Casual Vol.

  • Be the first to comment

My sql event_scheduler_casual_slideshare__

  1. 1. MySQLEvent Scheduler Casual Vol.1 id:myfinder
  2. 2. 今回話すこと Event Scheduler 機能を 使うときのポイント MySQL Event Scheduler Casual
  3. 3. 1. 機能の紹介2. 実際の用途と運用上の注意点 MySQL Event Scheduler Casual
  4. 4. 機能の紹介MySQL Event Scheduler Casual
  5. 5. Event Schduler とは●指定した時刻に、 指定した処理を行う機能。 ○cronのようなもの MySQL Event Scheduler Casual
  6. 6. 使うには?●MySQL 5.1以上必須●設定が必要 ○default は無効 MySQL Event Scheduler Casual
  7. 7. my.cnf [mysql] event_scheduler = ON > SET GLOBAL event_scheduler = ON; ※ON/OFFは1/0でもOK MySQL Event Scheduler Casual
  8. 8. 有効になっている場合 MySQL Event Scheduler Casual
  9. 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. 10. ステートメントを複数● DELIMITER を変えて BEGIN - ENDで指定すればOKDELIMITER ||CREATE EVENT log_do_event ON SCHEDULE EVERY 1DAY STARTS 2011-08-09 19:00:00DO 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. 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. 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. 13. レプリケーションとイベント● CREATE EVENT 文はレプリケーションされる ○ スレーブ側でもイベントが登録されるが 「SLAVESIDE_DISABLED」設定になる ○ マスタ側は「ENABLED」設定になっている● mysqldumpで吐かれる設定はそれぞれの設定状況に従う ○ マスタでdumpをとるとENABLEDに ○ スレーブでとるとSLAVESIDE_DISABLEDになる MySQL Event Scheduler Casual
  14. 14. 詳しくは●MySQLのマニュアル見て!●ググって! MySQL Event Scheduler Casual
  15. 15. 実際の用途MySQL Event Scheduler Casual
  16. 16. 用途(例● partitioningした table の rotate ○ range partition table● table から不要なデータを purge ○ range partition 以外の table ※どちらも procedure を kick して実行している MySQL Event Scheduler Casual
  17. 17. Eventでやればcrontabにスクリプト仕掛けないで済む\(^o^)/ MySQL Event Scheduler Casual
  18. 18. となればいいんですがいろいろ注意点が。。。MySQL Event Scheduler Casual
  19. 19. 運用上の注意点MySQL Event Scheduler Casual
  20. 20. 運用上の注意点 ●設定 ●日常の運用 ●障害復旧 MySQL Event Scheduler Casual
  21. 21. ● マスタ/スレーブともにONにしないと ○ CREATE EVENTでこける ○ マスタ切替時にENABLEDにできない● 基本的にマスタでのみENABLEにする ○ でないとスレーブ側で2回イベントが走って 悲しいことが起こる ○ あるいはprocedure側で判定するか... MySQL Event Scheduler Casual
  22. 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. 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. 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. 25. 障害復旧● スレーブをマスタに昇格させるとき ○ 新マスタでENABLEDにする ○ 旧マスタはSLAVESIDE_DISABLEDに● スレーブを追加するとき ○ SLVESIDE_DISABLEDか確認 MySQL Event Scheduler Casual
  26. 26. まとめMySQL Event Scheduler Casual
  27. 27. Event Schedulerは● Event は正しく付き合えばいろいろできそう ○ 既に安全に運用できる枠組みがあるならそっちでも...● cron でも Event でも適切な監視は必須 ○ 適切に監視すれば Event も怖くないよ!! ○ Event でやったほうが component 減らせていい(かも MySQL Event Scheduler Casual

×