日期:2014-05-16 浏览次数:20661 次
数据安全探讨——入门级探讨
数据库的数据安全是商业系统必须解决的问题,以往我们也采用了一些手段进行定期数据备份,比如定期备份sybase,mysql热备份等。这次地税服务器中坏掉的硬盘给我们敲响了警钟:数据安全还需要得到我们的加倍重视
,单机定时备份不能满足我们的要求。
目前公司已经部署的项目中最好的数据安全方案是国税申报服务器使用的“Mysql双机热备份”——这个名称其实是个误解,因为通常意义上的“双机热备份”要求系统在错误发生时能自动切换服务器——Mysql官方把它称为"主从机间的单向异步复制
",见:参考文档
。文档介绍得很详细,我就不鹦鹉学舌了——国税组也比我更有发言权。我就大致介绍一下它的实现原理和一些显著特征。
【MySQL主从机单向复制】
现在有一台MySql数据库A,我们再加一台数据库B做备份和查询。
1, A作为主机,B作为从机互连(用sql就可以实现了);
2,主机可以执行任意sql,从机B则只能执行select语句。
3, 从机B不停地监听A的活动。每当A执行insert、delete、update操作时,B就去解析这些操作的二进制日志,把相应数据的改变同步到自己库里,这样就实现了单向
数据复制。
4, 这种复制是异步
的,也就是说从机B不需要一直在线。每当B第一次连上A时,B会把上次同步后产生的数据改变复制到自己库里,然后保持监听状态。
5,从机B怎么知道要复制的数据是哪些呢?这是通过分析A的二进制日志的时间戳
。因此A必须开启二进制日志功能。
6,AB是两台独立的服务器
。这种系统的架构不需要额外的管理软件
。
7,从机B可以执行查询,所以这部分负载可以被B分流
。
8,如果A的硬盘完蛋,那么系统就暂时完蛋了。需要手工用B的数据来恢复数据库,因此不具备无缝切换性
,但用于实时性不高的应用还是非常理想的。
下面研究研究oracle数据库的备份能力。
【oracle高级复制】
一开始,我发现了oracle的高级复制(Advanced
Replication)功能囊括了双机单向复制的能力,这是由其"物化视图复制"功能提供的——当然“高级复制”的能力主要是用于分布式系统的数据同
步,备份能力是一个小小的附带结果。在详细阅读了相关资料后,发现“高级复制”真的是很“高级”,需要了解一堆术语和sql,而且复制精确到对象级别
(表、模式等),整库备份实现起来很麻烦。功能强大,但是配置和管理相当麻烦,因此转寻其他解决途径。
"oracle高级复制"中文资料:
附件
: Advanced.Replication.Research.by.Kamus.pdf
(2007-9-25 11:27, 307.39 K)
该附件被下载次数 11
因为对oracle的技术体系缺乏了解,所以这真是“探索”工作。初步了解到oracle具有Dataguard/rman,还有待分析.
【oracle Data Guard技术】
Oracle Data Guard是一种整库备份、恢复技术,Oracle8i 中引入,并在Oracle9i 中做了很大改进
。在这之前,oracle的备份工作全要手工进行。与“高级复制”不同,它只能用于同构环境(即相同的操作系统),也无法对细节(单个表,用户等)进行复制。它就相当于上面提到的MySQL的热备份。
附件
: oracle 9i dataguard概述.rar
(2007-9-26 10:45, 524.19 K)
该附件被下载次数 9
转载一篇blog,讲的简单易懂 http://www.onlyblog.com/blog2/hnshicq/archives/2007/8148.html
。
?
另外还有一篇资料《Dataguard配置Step by Step
》,详细(:对了解oracle者而言)介绍了unix下实施dataguard的步骤。(该网站和itpub.net的oracle版块是国内极好的oracle资料库,最好的当然是oracle官网)
【oracle stream replication】
从oracle 9iR2开始,出现了一种"流复制(stream replication)
"技术,这种复制模式类似"高级复制",但是更加强大和高效。不但具备了"高级复制"的所有优点,还大大减少了cpu性能消耗和数据传输量
。
这是因为在传输日志时,它会先将日志进行逻辑分析,将结果进行传送而不是把所有redo
log傻傻地全部传给备份数据库。举个例子,如果你先给表A插入一条数据,然后删除掉。那么“流复制”在经过日志分析后就知道表A其实没有被改变,因此就
不需要传输任何数据。这种智能分析能力是之前的所有复制手段都比不上的。(PS:如果大家用过HSQLDB就会知道,HSQLDB在数据库关闭时也会执行
类似操作,能够大大缩小存储空间)
“流复制”在oracle 10g中得到了极大的增强,不但提供了迁移“高级复制”到“流复制”的脚本,还提供了很好的配置和监控工具,可见oracle决心力推“stream replication”来提供更加简单强大的数据复制的能力。
?
补充:
Mysql的主从复制是通过二进制日志来实现的
先说一下这个很重要的二进制日志
Mysql
数据库开启二进制日志后,服务器会把所有的执行成功的事务(当然也包括 sql
了)都保存在二进制日志中,这种日志可以通过数据库进行重新执行(在快照的基础上),通过定期的快照+二进制日志,在很大程度上可以保障数据的安全和完整
性,比如数据库崩溃、数据库误操作。几种主要的数据库都有类似的功能,当然叫法不同而已。国税就通过这个功能,挽救了被误删的一个申报期的数据,就在实现
双机热备以后不久,实在是万幸。
Mysql的主从复制是二进制日志的一个扩展应用,从机是主机的一个快照+马上执行的二进制日志,从机使
用特定权限的用户不断获取主机不断更新的二进制日志,然后马上执行(从国税服务器的实际使用看,速度在毫秒级),从而实现了数据的复制,这个已经可以称为
是双机热备份了(所谓热备也是就在线备份),实际上主从复制是不限于二台服务器的,还可以有
A—>B,A—>C,A—>D,或A—>B—>C—>D 等更复杂的结构
这种机制,可以扩展到生产机和查询机(甚至多台查询机)的应用,分流查询压力,国税就是采用的这种模式。
从理论上是可以 A—>B,B—>A,实