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