MySQL 5.1+には、イベントスケジューリングを作成する機能があります。
2時間以上経過したテーブルからの行の削除をスケジュールする方法の例を次に示します。
drop database rolando;
create database rolando;
use rolando
create table mydata (id int not null auto_increment primary key,ti_time timestamp DEFAULT current_timestamp) ENGINE=MyISAM;
DELIMITER $$
DROP PROCEDURE IF EXISTS `rolando`.`LoadMyData` $$
CREATE PROCEDURE `rolando`.`LoadMyData` ()
BEGIN
DECLARE NDX INT;
SET NDX = 0;
WHILE NDX < 100 DO
INSERT INTO mydata (ti_time) VALUES (NOW() - INTERVAL CEILING(14400*RAND()) SECOND);
SET NDX = NDX + 1;
END WHILE;
END $$
DELIMITER ;
show create table mydata\G
SHOW CREATE PROCEDURE LoadMyData\G
CALL rolando.LoadMyData();
CREATE TABLE ta_table LIKE mydata;
ALTER TABLE ta_table DISABLE KEYS;
INSERT INTO ta_table SELECT SQL_NO_CACHE * FROM mydata;
ALTER TABLE ta_table ENABLE KEYS;
CREATE EVENT ev
ON SCHEDULE
EVERY 1 MINUTE
STARTS (NOW() + INTERVAL 1 MINUTE)
DO
DELETE FROM ta_table WHERE ti_time > NOW() - INTERVAL 2 HOUR;
SELECT COUNT(1) FROM ta_table;
SELECT SLEEP(62);
SELECT COUNT(1) FROM ta_table;
イベントスケジューリングをアクティブにするには、次の2つのことを行う必要があります。
まず、手動でアクティブ化します。
SET GLOBAL event_scheduler = 1;
次に、これをmy.iniに追加して、mysqlを再起動した場合にイベントスケジューラを保持します。
[mysqld]
event_scheduler = 1;
ここから、ストアドプロシージャを使用して独自の顧客バックアッププロシージャを設計し、そのストアドプロシージャをスケジュールできます。しかし、私が聞いた1つの欠点は、これをトラブルシューティングするために一度試みたイベントから呼び出されたストアドプロシージャ内のInnoDBテーブルを更新することでした。
MySQLイベントを使用しないより安定したアプローチも、より単純なアプローチです。
mysqldumpを実行するDOSバッチファイルを作成し、選択した宛先ファイルに出力を保存します。次に、Windowsスケジューラを使用して、そのDOSバッチファイルを呼び出します。
試してみる !!!