基于交易日志的数据库同步和热备
何谓交易日志


        数据库日志是记录对数据库详细操作的文件,包含在线日志和归档日志,但是归跟到底,数据库是为了保证交易完整性而放弃了简单的文件操作,必须通过相关文件的集合来完成一组不能划分的交易处理,同时可以通过这些操作回滚到交易之前的某数据时刻。
        基于上述考虑,交易日志就应运而生了,他允许我们通过特定工具查看相关交易发生时的一些要素,比如时间、用户、SQL语句等,它是数据库日志中和应用系统产生的交易关系紧密的数据库操作、数据集合。
交易日志和数据区别


        交易日志中包含了数据库的DDL、DML、DCL操作日志,不只含有各时刻日志,还含有各时刻数据,这样我们通过对交易日志的分析能够得出用于交易审计的热点数据:日期、时间、用户名、操作类型、表名、操作字段等,通过这些数据我们就可以得出一些具体的和交易相关的历史操作数据,从而达到对操作和数据在某一时刻的三维审计。
        但是数据库中的数据就不一样了,它永远是某一时刻的真实数据,它只反映查看点时刻的数据情况,无法记录历史,如果想通过交易层面进行历史数据分析,那么只好建立历史操作表,在每次操作完成后把操作内容记录在该表中,但这样做永远无法达到通过日志进行分析的精细度和安全性,因为我们平时的SQL语句记录的只是部分字段,无法象日志那样记录全部字段内容,从而让我们无法了解该交易操作前的记录原始面貌如何;同时这样操作又增大了数据库的负担,让数据库记录了更多不属于交易系统的数据,增大了系统开销;另外,简单的操作即可让整个表数据消失,这样增大了很多系统管理风险。
交易日志用于同步


        对于同步和热备大家已经不陌生,同步是热备的基础,只有从主库同步相关的操作到备库执行,才能保证数据在备库完整重现,而同步的时候考虑到并发效率和整个数据库的所有表,就产生了热备的效果。
        为何使用交易日志能够实现同步和热备的功能呢?这是因为,通过对交易日志的分析,我们掌握了主库中成功交易的完整原子操作,之后我们把原子操作在备库执行就完全可以再现主库执行的结果,从而实现了同步的功能,有时我们并不需要把数据文件的改变传导到备库,而是需要把数据改变的操作应用于备库即可达到同步的目的。
交易日志的同步特点


基于交易日志的同步,有很多优势:
1、按需复制

        可以根据用户名、表名、甚至字段进行选择性复制
2、备库活动

        因为数据库要执行交易,所以备库是属于常开模式,所以很多系统可以拿备库作为查询统计的数据源来为主库分担压力,同时由于同步的实时性,保证查询统计的时点大大提前于数据仓库提供的数据源
3、支持不同操作系统

        因为我们是通过读日志来进行分析的,那我们只需要一个数据库连接就足够了,不过当然这个连接的
权限是能够访问到数据库的日志级别
4、支持卫星带宽

        因为我们只传输SQL语句,所以我们的同步模式传输的数据永远是最少的,即使带宽很小我们也能传输
5、支持断点续传

        因为交易日志是由同步软件进行分析的,那么通过记录分析日志的相关断点我们就能够找到网络异常时最后一条交易日志的位置;同样在备库执行时,我们可以通过备库的交易日志分析出来在备库的执行语句是否已经成功
6、不在主库安装程序

        对于交易日志的获取我们数据库连接即可,而不需要在主备库上安装程序,这样对主库的CPU和内存影响
达到最小
与其他技术的差异


目前世界上的数据库同步技术主要有三种:
1、触发器方式

        此种方式必须要在主库上针对每张表建立相应的触发器,只要该表进行操作,就记录操作前的SQL语句,并在操作后的条件中增加到备库的执行,此种方式部署简单,原理简单,但是需要在主库进行大量操作,所以占用主库资源较大,适合小微企业压力不大的服务器使用
2、数据格式分析

        此种方式需要在数据文件写入时进行捕捉,之后把备库中相应的数据进行修改,此种方式多为存储设备厂家使用,因为通过对底层数据写入的监视,可以获得数据具体改变的位置,但此种方法的限制是主、备库数据文件要一致,同时此种方法无法达到对交易SQL语句的分析,并且备库是不能进行操作的,防止备库数据会有所改变
3、日志文件分析

        此种方式最多,通过对日志文件的监视,对改变的日志文件进行分析,可以定位出相关交易的SQL集合,从而在备库执行,数据库日志可以获取的很完整,但是此种方法的最大问题是要读取和分析主库日志文件格式,所以同步程序必须要安装在主库,对不同操作系统的数据需要进行不同的版本维护,另外对每种数据库不同版本的日志文件都需要进行相应的分析,导致后期维护工作巨大。
4、交易日志方式

        这是目前数据库同步部署起来最简便的方式,通过数据库连接读取数据库日志,不需要访问数据库日志文件,另外和操作系统无关,和数据库版本无关,程序维护只需要一个版本加上不同的功能模块即可保持软件产品的组合高效

        目前,数据库同步主要由上面四种技术来进行支撑,其中3、4这两种都是对日志的读取,只是交易日志方式让我们看到了更多的灵活性,让同步热备实现起来更加简单也更容易维护,同时基于自身独有的特点很多是其他方式做不到的,更加具有吸引力。