SlideShare a Scribd company logo
1 of 27
Download to read offline
MySQL
Event Scheduler
 Casual Vol.1
    id:myfinder
今回話すこと



 Event Scheduler 機能を
   使うときのポイント


   MySQL Event Scheduler Casual
1. 機能の紹介
2. 実際の用途と運用上の注意点



   MySQL Event Scheduler Casual
機能の紹介



MySQL Event Scheduler Casual
Event Schduler とは


●指定した時刻に、
 指定した処理を行う機能。
 ○cronのようなもの


      MySQL Event Scheduler Casual
使うには?



●MySQL 5.1以上必須
●設定が必要
 ○default は無効


   MySQL Event Scheduler Casual
my.cnf

   [mysql]
   event_scheduler = ON

   > SET GLOBAL
   event_scheduler = ON;
                           ※ON/OFFは1/0でもOK

         MySQL Event Scheduler Casual
有効になっている場合




   MySQL Event Scheduler Casual
イベントの登録

● 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
ステートメントを複数

● 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
スケジュールの指定
● 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
イベントの変更/削除/確認
● 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
レプリケーションとイベント

● CREATE EVENT 文はレプリケーションされる
   ○ スレーブ側でもイベントが登録されるが
     「SLAVESIDE_DISABLED」設定になる
   ○ マスタ側は「ENABLED」設定になっている

● mysqldumpで吐かれる設定はそれぞれの設定状況に従う
   ○ マスタでdumpをとるとENABLEDに
   ○ スレーブでとるとSLAVESIDE_DISABLEDになる




      MySQL Event Scheduler Casual
詳しくは



●MySQLのマニュアル見て!
●ググって!



       MySQL Event Scheduler Casual
実際の用途



MySQL Event Scheduler Casual
用途(例


● partitioningした table の rotate
   ○ range partition table
● table から不要なデータを purge
   ○ range partition 以外の table

         ※どちらも procedure を kick して実行している



       MySQL Event Scheduler Casual
Eventでやればcrontabに
スクリプト仕掛けないで済む\(^o^)/




   MySQL Event Scheduler Casual
となればいいんですが
いろいろ注意点が。。。



MySQL Event Scheduler Casual
運用上の注意点



MySQL Event Scheduler Casual
運用上の注意点


   ●設定
   ●日常の運用
   ●障害復旧


   MySQL Event Scheduler Casual
● マスタ/スレーブともにONにしないと
  ○ CREATE EVENTでこける
  ○ マスタ切替時にENABLEDにできない
● 基本的にマスタでのみENABLEにする
  ○ でないとスレーブ側で2回イベントが走って
    悲しいことが起こる
  ○ あるいはprocedure側で判定するか...



     MySQL Event Scheduler Casual
日常の運用
● 設定項目を監視すべき
   ○ 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
日常の運用
● 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
日常の運用
● 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監視が引っかかったらここを見る
障害復旧


● スレーブをマスタに昇格させるとき
  ○ 新マスタでENABLEDにする
  ○ 旧マスタはSLAVESIDE_DISABLEDに
● スレーブを追加するとき
  ○ SLVESIDE_DISABLEDか確認



     MySQL Event Scheduler Casual
まとめ



MySQL Event Scheduler Casual
Event Schedulerは

● Event は正しく付き合えばいろいろできそう
  ○ 既に安全に運用できる枠組みがあるならそっちでも...

● cron でも Event でも適切な監視は必須
  ○ 適切に監視すれば Event も怖くないよ!!
  ○ Event でやったほうが component 減らせていい(かも




       MySQL Event Scheduler Casual

More Related Content

Viewers also liked

Hotサービスの傾向
Hotサービスの傾向Hotサービスの傾向
Hotサービスの傾向Eiji Kuroda
 
いまどきのチームびるでぃんぐ
いまどきのチームびるでぃんぐいまどきのチームびるでぃんぐ
いまどきのチームびるでぃんぐEiji Kuroda
 
SmartPhone と AdTechの世界
SmartPhone と AdTechの世界SmartPhone と AdTechの世界
SmartPhone と AdTechの世界Eiji Kuroda
 
YAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきましたYAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきましたTatsuro Hisamori
 
今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれTatsuro Hisamori
 
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用Tatsuro Hisamori
 
アドテク勉強会0819
アドテク勉強会0819アドテク勉強会0819
アドテク勉強会0819Hideya Kato
 
AdServerの仕組み
AdServerの仕組みAdServerの仕組み
AdServerの仕組みEiji Kuroda
 
CGI Perlでわかる!サーバレス
CGI Perlでわかる!サーバレスCGI Perlでわかる!サーバレス
CGI Perlでわかる!サーバレスTatsuro Hisamori
 

Viewers also liked (10)

Hotサービスの傾向
Hotサービスの傾向Hotサービスの傾向
Hotサービスの傾向
 
いまどきのチームびるでぃんぐ
いまどきのチームびるでぃんぐいまどきのチームびるでぃんぐ
いまどきのチームびるでぃんぐ
 
SmartPhone と AdTechの世界
SmartPhone と AdTechの世界SmartPhone と AdTechの世界
SmartPhone と AdTechの世界
 
YAPCEurope2014-myfinder
YAPCEurope2014-myfinderYAPCEurope2014-myfinder
YAPCEurope2014-myfinder
 
YAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきましたYAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきました
 
今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ
 
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
 
アドテク勉強会0819
アドテク勉強会0819アドテク勉強会0819
アドテク勉強会0819
 
AdServerの仕組み
AdServerの仕組みAdServerの仕組み
AdServerの仕組み
 
CGI Perlでわかる!サーバレス
CGI Perlでわかる!サーバレスCGI Perlでわかる!サーバレス
CGI Perlでわかる!サーバレス
 

My sql event_scheduler_casual_slideshare__