Skip to content

Instantly share code, notes, and snippets.

@wheresjames
Created February 23, 2017 20:00
Show Gist options
  • Save wheresjames/410affe55458b950dd3d17ae896f5cf8 to your computer and use it in GitHub Desktop.
Save wheresjames/410affe55458b950dd3d17ae896f5cf8 to your computer and use it in GitHub Desktop.

Backup scripts for MySQL

# Move rows from one table to backup table
DELIMITER $$
DROP PROCEDURE IF EXISTS backup_events_table $$
CREATE PROCEDURE backup_events_table()
proc_label:BEGIN
SET @oldest = (SELECT `created` FROM events WHERE `created` < DATE_SUB(NOW(),INTERVAL 2 DAY) ORDER BY created ASC LIMIT 1);
IF @oldest IS NULL THEN
LEAVE proc_label;
END IF;
set @oldest_day = DATE_FORMAT(@oldest,'%Y-%m-%d');
SET @tbl = CONCAT('events-', @oldest_day);
SET @q = CONCAT('CREATE TABLE IF NOT EXISTS `', @tbl, '` LIKE `events`');
PREPARE stmt FROM @q;
EXECUTE stmt;
SET @q = CONCAT('INSERT INTO `', @tbl, '` SELECT * FROM `events` WHERE DATE_FORMAT(created, "%Y-%m-%d") = "', @oldest_day, '"');
PREPARE stmt FROM @q;
EXECUTE stmt;
SET @q = CONCAT('DELETE FROM `events` WHERE DATE_FORMAT(created, "%Y-%m-%d") = "', @oldest_day, '"');
PREPARE stmt FROM @q;
EXECUTE stmt;
END $$
DELIMITER ;
# Backup table event
CREATE EVENT backup_tables
ON SCHEDULE EVERY 24 HOUR
DO
CALL backup_events_table();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment