注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿飘的博客

十里平湖霜满天 寸寸青丝愁华年

 
 
 

日志

 
 

MySQL内存表自动备份和还原  

2011-08-07 15:37:27|  分类: mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

MySQL重启后,内存表中的数据将一无所有。 
要想即要速度,又要保存住内存表中的数据,必须定时将内存表中的数据备份到一般表中,同时,DB重启后,还需要将备份表中的数据还原到内存表中。 
貌似是MySQL 5.1.6之后,MySQL开始支持EVENT处理了,可以设定自己的定时器,将内存表中的数据定期备份到一般表中。 
1、备份内存表的几个步骤 
1) 打开event_scheduler。 


Sql代码 
mysql> set global event_scheduler = on;  
重启后,event_scheduler还会变成off的,需要在my.cnf中增加一句话,重启后自动为on。 
Java代码 
event_scheduler=ON  
2) 创建备份定时器。 
Sql代码 
delimiter |  
CREATE EVENT feed_infos_2_feed_infos_bak_event  
  ON SCHEDULE EVERY 1 DAY  
            STARTS TIMESTAMP '2009-09-23 0:30'  
  ON COMPLETION PRESERVE  
  COMMENT 'comments'  
  DO  
    BEGIN  
    INSERT INTO feed_infos_bak(  
    user_id,   
    user_name,  
    created_at  
  )  
  (  
    SELECT  
      user_id,   
      user_name,  
      created_at  
    FROM  
      feed_infos  
    WHERE  
      created_at > (SELECT MAX(created_at) FROM feed_infos_bak)  
  );  
    
  DELETE FROM feed_infos WHERE DATEDIFF(NOW(), created_at) > 31;  
END |  
delimiter ;  
这样每天凌晨0:30,MySQL会自动将feed_infos内存表的数据导入到其备份表feed_infos_bak中。 
2、实现MySQL重启后,内存表数据的自动还原 
1) 新建一个init-file文件。 
加上下面两句SQL。千万注意:每行一条语句,万不可将一条语句分开多行写。 
Sql代码 
use xxx_development;  
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代码 
[server]  
init-file=${path}/init.file  
${path}是放置init-file的路径。 
重启MySQL,就会发现feed_infos_bak表中的数据成功还原到feed_infos表里了。
  评论这张
 
阅读(845)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018