+ -
当前位置:首页 → 问答吧 → 我是这样还原备份数据的

我是这样还原备份数据的

时间:2009-05-19

来源:互联网

对重要的数据要每天都得备份,如果非常重要的数据要时时备份,这个很重要,一旦数据丢失,备份就显示了它的作用了。
这两天公司博客的数据突然丢失了一半,也没查出是什么原因,幸好有备份及时把数据恢复了。我的具体操作如下:
1、查看最新的备份数据,然后对比一下现在有的数据,看看数据是从什么时候丢失的。再确定要恢复哪一天的备份数据。
2、选择好备份数据后,再把备份的数据直接拷贝mysql目录中的数据文件夹下面,重新名一个新名字(假如原来的数据库为A,备份数据库为B)。
3、把要恢复的数据表的结构拷贝一份(假如为A.blog),再新建一个数据表(假如为a.blog_bak)。
4、用insert into select语句先把那个备份数据库中的数据导入到现有数据库表中,
如:insert into A.blog_bak select * from B.blog
这样就把备份的数据还原了,可是A.blog中还存在一些新的数据,现在就是把A.blog中最新的数据导入到a.blog_bak中,如下:
insert into A.blog_bak select * from A.blog where id > 100000;//通过ID就可以查出从哪条开始导入最新数据了。
5、然后再对表进行改名就可以了,如下:
rename table A.blog to A.blog_bak2;
rename table A.blog_bak to A.blog;
6、最后再把备份和备份表删除掉就完成了。
这是我第一次还原数据,也不清楚这样操作对不对,还请大家来指点,说说你们是怎么来还原数据的。

作者: myos   发布时间: 2009-05-19

老哥,我觉得这样的逻辑顺序都错,如果正式库的正式表A是实时有数据插进来的话,那你就在A里完成数据插入操作.假若B为A的一个备份,那么进行二表对照A为标准找出B有A没有的数据导入A中这其实一条SQL就完成了.这条sql也不难,如果考虑到速度就是说表里的数据量大就可先导入文件在用文件导入库如果数据量小可以一条sql完成查找插入操作.标准是100W条数据,在标准以上分二步,以下就一步

作者: verywin   发布时间: 2009-05-19

本帖最后由 myos 于 2009-5-19 15:28 编辑

谢谢,在插入数据的时候是不会有丢失的,可能在重命名的时候有丢失,再插入一次就可以了,呵呵,如果写在一条语句中就不会出问题,问:怎么比较两个表中的数据呢?

作者: myos   发布时间: 2009-05-19

LZ, 我顶你个肺啊!俺不说两句,心里过意不去,刚心里憋得慌,回来说两句了,心里终于踏实了。

作者: mmxcq   发布时间: 2009-05-19

作者: myos   发布时间: 2009-05-19

假设A的字段id可以唯一确定一个记录,B为A的备分,考虑到效率,我是用not exists,具体如下
select * from 库名.B as t1  where [B的条件,可以不要] and not exists(select 1 from 库名.A as t2 where t1.id=t2.id  and [A的条件,可以不要])
这样就把B有A没有的找出来了,当然了如果确定一条记录需求二个以上字段就依次加上,比如t1.id=t2.id and t1.order=t2.order

作者: verywin   发布时间: 2009-05-19

学习一下

作者: myos   发布时间: 2009-05-19