MySQL數據庫表始終保持最近兩個月的記錄

實現自動備份的方法不少,這裏說的是客戶須要始終保持某個表中存儲兩個月的記錄,以便保持性能。過時數據咱們建議存儲到另一個表中,以備之後查詢使用。
咱們採用存儲過程+linux Crontab的方式實現。mysql

建立存儲過程

CREATE DEFINER=`root`@`localhost` PROCEDURE `bl_order_bak`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
-- 將舊錶數據暫存起來
drop table if exists `bl_order_old`;
create table `bl_order_old` as (select * from bl_order);
-- 將超過兩個月的數據保存到一個以時間爲後綴的表中
set @str = date_format(now(), '%Y%m%d%H%i%s');
set @SQLString = CONCAT('create table bl_order_',@str,' as (select * from bl_order where add_time < date_sub(now(),interval 2 month))');
PREPARE stmt from @SQLString;
EXECUTE stmt; 
-- 刪除這些已經備份的數據,並清理表的空間
delete from `bl_order` where add_time < date_sub(now(),interval 2 month);
optimize table `bl_order`;
END

爲執行此存儲過程建立腳本

#!/bin/bash
mysql -hlocalhost -uroot -pbei666999 -P3306 -e "call  boli.bl_order_bak" ;

將文件存儲起來:File:/data/order_bak.sh
並賦予執行權限:chmod +x /data/order_bak.shlinux

建立計劃任務

crontab -e
59 23 1 * * sh /webdata/order_bak.sh

設定每個月1號23點59分執行腳本調用存儲過程。web

相關文章
相關標籤/搜索