In MySQL 5.1+ gibt es die Möglichkeit, eine Ereignisplanung zu erstellen .
Hier ist ein Beispiel, wie Sie das Löschen von Zeilen aus einer Tabelle planen, die älter als 2 Stunden sind:
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;
Um die Ereignisplanung zu aktivieren, müssen Sie zwei Dinge tun:
Zuerst von Hand aktivieren:
SET GLOBAL event_scheduler = 1;
Fügen Sie dies dann zu my.ini hinzu, um den Ereignisplaner beizubehalten, falls Sie mysql neu starten
[mysqld]
event_scheduler = 1;
Von hier aus können Sie Ihre eigene Kundensicherungsprozedur mithilfe gespeicherter Prozeduren entwerfen und diese gespeicherte Prozedur dann planen. Der einzige Nachteil, von dem ich gehört habe, war das Aktualisieren von InnoDB-Tabellen innerhalb einer gespeicherten Prozedur, die von einem Ereignis aufgerufen wurde, das ich einmal versucht habe, bei der Fehlerbehebung zu helfen .
Ein stabilerer Ansatz ohne Verwendung von MySQL Events ist auch der einfachere Ansatz.
Schreiben Sie eine DOS-Batchdatei, die einen mysqldump ausführt, und speichern Sie die Ausgabe in der Zieldatei Ihrer Wahl. Verwenden Sie dann einfach den Windows-Scheduler, um diese DOS-Batchdatei aufzurufen.
Versuche es !!!