Dans MySQL 5.1+, il existe la possibilité de créer une planification d'événements .
Voici un exemple de planification de la suppression de lignes d'une table datant de plus de 2 heures:
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;
Pour activer la planification d'événements, vous devez faire deux choses:
Tout d'abord, activez à la main:
SET GLOBAL event_scheduler = 1;
Ensuite, ajoutez ceci à my.ini pour conserver le planificateur d'événements au cas où vous redémarreriez mysql
[mysqld]
event_scheduler = 1;
À partir de là, vous pouvez concevoir votre propre procédure de sauvegarde client à l'aide de procédures stockées, puis planifier cette procédure stockée. Cependant, le seul inconvénient dont j'ai entendu parler était la mise à jour des tables InnoDB dans une procédure stockée appelée à partir d'un événement que j'ai essayé de résoudre ce problème .
Une approche plus stable sans utiliser les événements MySQL est également l'approche la plus simple.
Écrivez un fichier batch DOS qui exécuterait un mysqldump et enregistrez la sortie dans le fichier de destination de votre choix. Ensuite, utilisez simplement le planificateur Windows pour appeler ce fichier batch DOS.
Essaie !!!
RolandoMySQLDBA
la source