MySQL内存表自动备份和还原

转自:http://netfork.iteye.com/blog/476505

MySQL重启后,内存表中的数据将一无所有。 
要想即要速度,又要保存住内存表中的数据,必须定时将内存表中的数据备份到一般表中,同时,DB重启后,还需要将备份表中的数据还原到内存表中。 

貌似是MySQL 5.1.6之后,MySQL开始支持EVENT处理了,可以设定自己的定时器,将内存表中的数据定期备份到一般表中。 

1、备份内存表的几个步骤 
1) 打开event_scheduler。 

Sql代码   收藏代码
  1. mysql> set global event_scheduler = on;  

重启后,event_scheduler还会变成off的,需要在my.cnf中增加一句话,重启后自动为on。 
Java代码   收藏代码
  1. event_scheduler=ON  


2) 创建备份定时器。 
Sql代码   收藏代码
  1. delimiter |  
  2. CREATE EVENT feed_infos_2_feed_infos_bak_event  
  3.   ON SCHEDULE EVERY 1 DAY  
  4.             STARTS TIMESTAMP '2009-09-23 0:30'  
  5.   ON COMPLETION PRESERVE  
  6.   COMMENT 'comments'  
  7.   DO  
  8.     BEGIN  
  9.     INSERT INTO feed_infos_bak(  
  10.     user_id,   
  11.     user_name,  
  12.     created_at  
  13.   )  
  14.   (  
  15.     SELECT  
  16.       user_id,   
  17.       user_name,  
  18.       created_at  
  19.     FROM  
  20.       feed_infos  
  21.     WHERE  
  22.       created_at > (SELECT MAX(created_at) FROM feed_infos_bak)  
  23.   );  
  24.     
  25.   DELETE FROM feed_infos WHERE DATEDIFF(NOW(), created_at) > 31;  
  26. END |  
  27. delimiter ;  

这样每天凌晨0:30,MySQL会自动将feed_infos内存表的数据导入到其备份表feed_infos_bak中。 

2、实现MySQL重启后,内存表数据的自动还原  
1) 新建一个init-file文件。 
加上下面两句SQL。 千万注意:每行一条语句,万不可将一条语句分开多行写。  
Sql代码   收藏代码
  1. use xxx_development;  
  2. INSERT INTO feed_infos (user_id, user_name, created_at) (SELECT user_id, user_name, created_at FROM feed_infos_bak);  


2) 在my.ini(Linux:my.cnf)中加入下面几句话。 
Sql代码   收藏代码
  1. [server]  
  2. init-file=${path}/init.file  

${path}是放置init-file的路径。 

重启MySQL,就会发现feed_infos_bak表中的数据成功还原到feed_infos表里了。 

参考文献:  
http://blog.youkuaiyun.com/yueliangdao0608/archive/2008/04/19/2306778.aspx  
http://www.sofee.cn/blog/2007/07/18/91/  
http://dev.mysql.com/doc/refman/5.1/en/create-event.html  
http://www.mysql-china.com/viewthread.php?tid=948&extra=page%3D1  


全文完。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值