Di dalam MySQL 5.1+, ada kemampuan untuk membuat penjadwalan acara .
Berikut adalah contoh cara menjadwalkan penghapusan baris dari tabel yang berumur lebih dari 2 jam:
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;
Untuk mengaktifkan penjadwalan acara, Anda harus melakukan dua hal:
Pertama, aktifkan dengan tangan:
SET GLOBAL event_scheduler = 1;
Kemudian, tambahkan ini ke my.ini untuk menjaga penjadwal acara jika Anda me-restart mysql
[mysqld]
event_scheduler = 1;
Dari sini, Anda dapat merancang prosedur pencadangan pelanggan Anda sendiri menggunakan prosedur tersimpan dan kemudian menjadwalkan prosedur tersimpan itu. Namun, satu kekurangan yang saya dengar adalah memperbarui tabel InnoDB dalam prosedur tersimpan yang dipanggil dari suatu peristiwa yang pernah saya coba untuk membantu memecahkan masalah ini .
Pendekatan yang lebih stabil tanpa menggunakan Acara MySQL juga merupakan pendekatan yang lebih sederhana.
Tulis file batch DOS yang akan menjalankan mysqldump dan simpan output ke file tujuan pilihan Anda. Kemudian, cukup gunakan penjadwal Windows untuk memanggil file batch DOS itu.
Cobalah !!!