数据库异地容灾方法及系统 技术领域 本发明涉及数据库异地同步容灾技术领域, 更具体地, 涉及一种数据库异地容灾 方法及系统。
背景技术 目前电信领域正朝着多业务、 多网络的融合方向发展, 但在发展过程中大多数运 营商所建设的业务平台仍采用独立、 分离的建设模式。 每个业务平台, 无论其容量大小和功 能多少, 都需要单独部署对应该业务平台的数据库。 对于重要数据, 则需要对数据进行容灾 备份, 一般的做法是使用一套完整的存储设备对主服务器的存储数据进行备份, 而这些用 于备份的硬件资源在正常运营时, 无法产生任何盈利, 造成了硬件资源的大量使用或闲置, 导致较高的运营成本。
现 阶 段 各 大 运 营 商,尤 其 是 跨 国 运 营 商 都 面 临 着 减 低 CAPEX(CapitalExpenditure, 资 本 支 出 ) 和 OPEX(Operating Expense, 即运营成本 ) 的 重任, CAPEX 一般是指资金对固定资产的投入, 对电信运营商来说, 有关的网络设备、 计
算机、 仪器等一次性支出的项目都属于 CAPEX。因此新局点的部署和扩容, 都会遵循降低 TCO(Total Cost of Ownership, 总体成本 ) 的原则, 以最小的投入, 产生最大的收益。
在公开的专利文献中, 中国专利 CN200910236502.3 存在以下不足 : 仅涉及单向从 源数据库向另一个数据库进行数据同步, 没有对从源数据库同步过来的数据, 和由于业务 产生在目标数据库的数据进行区分。而另一中国专利 CN200510086911 则存在判断步骤太 多、 效率不高的缺陷, 因而不适合大数据量进行同步。 发明内容
本发明解决的技术问题是提供一种数据库异地容灾方法及系统, 在实现数据库异 地容灾的同时, 减低主服务器的负荷。
为解决上述技术问题, 本发明提供了一种数据库异地容灾方法, 所述方法包括 :
第一数据库对来源于本地数据库的数据变更生成变更文件, 根据所述变更文件生 成可执行脚本, 加上非同步标识后, 同步到第二数据库 ;
所述第二数据库执行所述可执行脚本对本地数据进行变更, 在向所述第一数据库 同步时, 根据所述可执行脚本带有的所述非同步标识识别出数据变更来源于所述第一数据 库, 则对执行所述可执行脚本引起的数据变更不再同步到所述第一数据库。
进一步地, 所述第一数据库和所述第二数据库互为对端数据库 ;
所述第一数据库或第二数据库根据执行的可执行脚本是否带有非同步标识, 识别 出数据变更来源于对端数据库还是本地数据库。
进一步地, 所述第一数据库或第二数据库识别出数据变更来源于对端数据库时, 对执行可执行脚本引起的数据变更不生成变更文件, 不再同步到对端数据库。
进一步地, 所述第一数据库或第二数据库识别出数据变更来源于本地数据库时,以单条语句为记录单元在缓冲池中生成所述变更文件 ;
从所述缓冲池中读取变更文件生成所述可执行脚本时, 对读取过的变更文件进行 改名, 并定期删除或转移备份所述缓冲池中改名后的变更文件。
进一步地, 所述数据变更包括 : 增加、 减少或内容变更。
本发明还提供了一种数据库异地容灾系统, 包括第一数据子系统和第二数据子系 统,
所述第一数据子系统用于, 对来源于本地数据库的数据变更生成变更文件, 根据 所述变更文件生成可执行脚本, 加上非同步标识后, 同步到所述第二数据子系统 ;
所述第二数据子系统用于, 执行所述可执行脚本对本地数据进行变更, 在向所述 第一数据子系统同步时, 根据所述可执行脚本带有的所述非同步标识识别出数据变更来源 于所述第一数据子系统, 则对执行所述可执行脚本引起的数据变更不再同步到所述第一数 据子系统。
此外, 所述数据子系统进一步包括 : 数据库、 缓冲池和同步进程模块,
所述数据库用于, 对来源于本地数据库的数据变更生成变更文件 ;
所述缓冲池用于, 缓冲所述数据库生成的所述变更文件 ;
所述同步进程模块用于, 读取所述缓冲池所述变更文件, 根据所述变更文件生成 可执行脚本, 加上非同步标识后, 同步到对端数据库。
此外, 所述数据库进一步用于, 根据执行的可执行脚本是否带有非同步标识, 识别 出数据变更来源于对端数据库还是本地数据库, 在识别出数据变更来源于对端数据库时, 对执行可执行脚本引起的数据变更不生成变更文件, 不再同步到对端数据库。
此外, 所述同步进程模块还用于, 从所述缓冲池中读取变更文件时, 对读取过的变 更文件进行改名 ;
所述缓冲池还用于, 定期删除或转移备份改名后的变更文件。
此外, 所述同步进程模块进一步用于, 对读取过的变更文件的文件名后缀进行修 改;
所述缓冲池进一步用于, 根据文件名的扩展名区分变更文件是否已改名。
与现有技术相比, 本发明至少具有如下有益效果 :
本发明在同步过程中, 对于从源数据库同步过来的数据和由于业务在目标数据库 产生的数据变更进行了区分, 对同步失败根据不通原因快速处理, 从而实现双向异地备份 容灾 ;
通过引进异地双向数据同步, 互为容灾系统, 使原本仅仅能够用于用户数据备份 的数据库也可以参与运营, 降低了主服务器压力, 同时也保证了数据安全性 ;
此外, 由于容灾系统也能够参与运营, 使容灾设备也可以产生收益, 降低了运营商 的 CAPEX 和 OPEX 等运营成本。 附图说明
图 1 为本发明实施例的数据库异地容灾系统的架构图 ;
图 2 为本发明实施例的数据库异地容灾的处理流程示意图。具体实施方式
鉴于现有技术的多种缺陷, 本发明提出一种数据库异地容灾方法, 采用如下技术 方案 :
第一数据库对来源于本地数据库的数据变更生成变更文件, 根据所述变更文件生 成可执行脚本, 加上非同步标识后, 同步到第二数据库 ;
所述第二数据库执行所述可执行脚本对本地数据进行变更, 在向所述第一数据库 同步时, 根据所述可执行脚本带有的所述非同步标识识别出数据变更来源于所述第一数据 库, 则对执行所述可执行脚本引起的数据变更不再同步到所述第一数据库。
进一步地, 所述第一数据库和所述第二数据库互为对端数据库 ;
所述第一数据库或第二数据库根据执行的可执行脚本是否带有非同步标识, 识别 出数据变更来源于对端数据库还是本地数据库。
进一步地, 所述第一数据库或第二数据库识别出数据变更来源于对端数据库时, 对执行可执行脚本引起的数据变更不生成变更文件, 不再同步到对端数据库。
进一步地, 所述第一数据库或第二数据库识别出数据变更来源于本地数据库时, 以单条语句为记录单元在缓冲池中生成所述变更文件 ; 从所述缓冲池中读取变更文件生成所述可执行脚本时, 对读取过的变更文件进行 改名, 并定期删除或转移备份所述缓冲池中改名后的变更文件。
进一步地, 所述数据变更包括 : 增加、 减少或内容变更。
为了便于阐述本发明, 以下将结合附图及具体实施例对本发明技术方案的实施作 进一步详细描述。
图 1 为本发明实施例的数据库异地容灾系统的架构图, 包括源数据子系统和目标 数据子系统, 其中 :
所述源数据子系统用于, 对来源于本地数据库的数据变更生成变更文件, 根据所 述变更文件生成可执行脚本, 加上非同步标识后, 同步到目标数据子系统 ;
所述目标数据子系统用于, 执行可执行脚本对本地数据进行变更, 在向源数据子 系统同步时, 根据可执行脚本带有的所述非同步标识识别出数据变更来源于所述源数据子 系统, 则对执行可执行脚本引起的数据变更不再同步到源数据子系统。
其中, 源数据子系统所在的环境 A 和目标数据子系统所在的环境 B 互为容灾, 数据 的备份是双向备份的, 两者就本身的组成而言并无区别。
如图 1 所示, 本实施例的数据子系统主要由以下几个模块构成 :
数据库, 主要用于源数据以及容灾数据的存储及处理 ;
缓冲池, 主要用于存储变更文件, 记录同步信息, 定期删除过期文件 ;
同步进程模块, 主要用于将数据库的内容同步到对端数据库。
进一步地, 所述数据库用于, 对来源于本地数据库的数据变更生成变更文件 ;
所述缓冲池用于, 缓冲所述数据库生成的所述变更文件 ;
所述同步进程模块用于, 读取所述缓冲池所述变更文件, 根据所述变更文件生成 可执行脚本, 加上非同步标识后, 同步到对端数据库。
此外, 所述数据库进一步用于, 根据执行的可执行脚本是否带有非同步标识, 识别 出数据变更来源于对端数据库还是本地数据库, 在识别出数据变更来源于对端数据库时,
对执行可执行脚本引起的数据变更不生成变更文件, 不再同步到对端数据库。
此外, 所述同步进程模块还用于, 从所述缓冲池中读取变更文件时, 对读取过的变 更文件进行改名 ;
所述缓冲池还用于, 定期删除或转移备份改名后的变更文件。
此外, 所述同步进程模块进一步用于, 对读取过的变更文件的文件名后缀进行修 改;
所述缓冲池进一步用于, 根据文件名的扩展名区分变更文件是否已改名。
结合上述实施例中的数据库异地容灾系统的组成模块, 本发明实施例的源数据库 到目标数据库的同步过程主要包括以下步骤 :
步骤一 : 源数据库存储的数据发生变更, 如增加、 减少或内容变更 ;
步骤二 : 源数据库判断是否为需要同步的数据, 即是否是来源于本地数据库的数 据变更, 如果是, 则根据该数据变更, 以单条语句为记录单元生成变更文件, 存储在本地缓 冲池 ;
其中, 在初始时, 源数据库存储的数据发生变更, 则直接根据数据变更生成变更文 件。 之后, 源数据库会根据数据变更是否带有非同步标识判断是否需要同步, 如果不带非同 步标识, 则说明是来源于本地数据库的数据变更, 需要同步, 则生成变更文件 ; 如果带有非 同步标识, 则说明是来源于目标数据库的数据变更, 则不生成变更文件。 步骤三 : 本地同步进程模块读取缓冲池中的变更文件, 根据变更文件中的记录单 元, 拼接语句, 生成可以在目标数据库执行的可执行脚本, 并加上非同步标识, 同步到目标 数据库 ;
步骤四 : 同步进程模块记录读取过的变更文件, 并将该变更文件改名, 防止重复读 取;
步骤五 : 目标数据库捕捉带有非同步标识的数据变更, 对于这些变更不在缓冲池 生成变更文件, 则仅执行可执行脚本对存储的数据进行变更, 不再生成变更文件, 返回到源 数据库 ;
步骤六 : 缓冲池将已经改名的文件定期删除或转移备份。
图 2 示出了本发明实施例的数据库异地容灾方法的完整流程图, 如图 2 所示, 该流 程具体包括如下步骤 :
步骤 1, 业务操作引起源环境 A 数据库中的数据记录变更 ;
步骤 2, 该数据记录所在表属于需要同步的表, 该表发生增量变化 ( 如增加、 减少 或内容变更 ), 需要及时同步到对端环境 ;
步骤 3, 判断该增量变化是否为带有非同步标识的数据变更导致 ( 可根据造成该 变更的脚本是否带非同步标识进行判断 ), 如果是, 则不在缓冲池生成变更文件 ;
步骤 4, 如果该增量变化是由不带有非同步标识的数据变更导致, 则在缓冲池生成 变更文件 ;
步骤 5, 同步进程模块读取变更文件, 开始进行同步 ;
同步进程模块在读取变更文件时, 从上一次同步处开始读取 ;
步骤 6, 同步进程模块将读取并同步过的文件改名 ;
步骤 7, 缓冲池定期按指定配置, 删除已改名的文件, 也即已经被同步过的文件 ;
具体地, 根据文件名的扩展名即可区分变更文件是否已改名, 例如 : 由于增量变化 生成的变更文件, 在新建的时候是以 .r 为文件名后缀, 而已经读取过的则被同步进程模块 改为以 .o 为文件名后缀。
需要说明的是, 上述步骤 6 与步骤 7 均在步骤 5 之后执行, 但该步骤 7 与步骤 6 并 无一定先后顺序关系。
步骤 8, 同步进程模块根据文件内容的变更, 拼接可执行脚本, 并加上非同步标识 后, 同步到对端数据库执行, 在对端数据库对应表进行变更操作 ;
步骤 9a, 如果在目标数据库执行过程中发生主键冲突错误, 则源数据库根据收到 的错误响应中的错误原因, 由源环境 A 中的同步模块抛弃该冲突记录, 本次操作结束 ;
步骤 9b, 源数据库中有张错误记录表, 如果在目标数据库执行过程发生除主键冲 突外的错误, 则源数据库将该类错误的执行语句记录到该表中 ;
步骤 9c, 如果可执行脚本在目标数据库顺利执行, 则引起相关数据记录发生变更, 目标数据库捕捉到该记录变更是由于带非同步标识的操作导致, 则不在本地缓冲池生成变 更文件。
综上所述, 本发明提供的数据库异地容灾方法及系统具有如下特点 : 1) 有环境 A, 环境 B 两套数据环境参与运营 ;
2) 业务数据分别进入环境 A, B 中的数据库 ;
3) 需要同步的数据在各自环境中的缓冲池生成变更文件 ;
4) 各自环境中的同步进程模块读取本地缓冲池中的变更文件, 带上非同步标识 后, 分别到对端环境中数据库执行, 以保证两个环境数据一致 ;
5) 环境 A, B 互为备份, 当任一环境被破坏时, 另一套环境能够保证全部数据的完 整性, 并迅速承接全部业务。
以上仅为本发明的优选实施案例而已, 并不用于限制本发明, 本发明还可有其他 多种实施例, 在不背离本发明精神及其实质的情况下, 熟悉本领域的技术人员可根据本发 明做出各种相应的改变和变形, 但这些相应的改变和变形都应属于本发明所附的权利要求 的保护范围。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令 相关硬件完成, 所述程序可以存储于计算机可读存储介质中, 如只读存储器、 磁盘或光盘 等。可选地, 上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应 地, 上述实施例中的各模块 / 单元可以采用硬件的形式实现, 也可以采用软件功能模块的 形式实现。本发明不限制于任何特定形式的硬件和软件的结合。