查看文章 |
数据库备份
2007-12-15 14:27
有谁知道像Google,Baidu等搜索引擎的索引数据怎么备份么? 以及一些RSS阅读器里面的Feed和文章数据怎么备份? 他们都有一个共同点就是数据量大,而大数据量下的数据备份绝对成了一个很大的挑战。在SD2China大会上,钱宏武谈到他在做搜狐社区产品的时候的一个关于数据备份的事。产品刚上线的时候他设计一个数据备份方案就是每天下午4点作一次全备份。这个方案在系统顺畅的运行了一段时间后出现了问题 ,因为太多的数据导致系统已经没有能力一次备份所有的数据了。 据我了解到的一些信息,数据量达到相当级别后,冗余的存储代替普通备份是一个不错的方案。也就是说,任何数据都不备份了,但是必须存储2个或者以上的副本,而主数据和副本数据几乎是实时被存储的,这样基本上在故障时数据丢失为0。这也是常说的双机热备的一个方案吧。虽然搜索引擎都不用数据库,但是冗余存储方案道理也是一样的。 拿Mysql来说,Master->Slaver结构应该最常用到的,在很多WEB2.0站点,单Master多Slaver结构、其中一个Slaver用做数据备份似乎已经成了标准设计方案。 其实Master->Slaver这种结构用于备份也不是没有缺陷,当出现人为的误操作而导致数据被修改或者被删除,那么Slaver的数据也会受同样的影响,这样的操作时不可恢复的(当然,这也许不全是数据备份的事情)。在Mysql中,我认为备份Binlog是一个解决此问题的办法。分析Mysql的Master->Slaver的实现,发现其实Slaver也是从Master的Binlog中读取SQL语句来执行的(不包括mysql5.1的基于数据行的复制),那么我们可以设计这样的一个备份程序: 1、实时读取主Master的Binlog,根据一定的过滤逻辑来过滤不正常的Update/Delete语句。 2、得到过滤好的SQL语句,传输到备份端数据库执行,得到一个完成的数据库。 3、恢复被人为误删的数据,在备份段导出数据然后在生产环紧导入。 以上是我的一些浅见,大家仍板砖! PS:问个问题,Master->Slaver结构中,如果Master突然挂了,怎么能尽快地恢复? |
最近读者: