从远程服务器进行异构数据库复制的系统和方法与流程

文档序号:20499557发布日期:2020-04-21 22:39阅读:198来源:国知局
优先权要求和对相关申请的交叉引用:本申请要求于2018年4月27日提交的标题为“systemandmethodforheterogenousdatabasereplicationfromaremoteserver”的申请no.62/663,954的美国临时专利申请的优先权权益;并与2013年8月13日公布的标题为“mysqldatabaseheterogeneouslogbasedreplication”的美国专利no.8,510,270相关;上述申请和专利中的每一个均通过引用并入本文。本文描述的实施例一般而言涉及变更数据捕获环境,并且特别涉及用于从远程服务器(例如,远程数据库服务器)进行异构数据库复制的系统和方法。
背景技术
::组织有时可能需要在不同的数据库环境之间移动、拷贝或以其它方式复制数据,例如以创建数据库的备份或以启用不同数据库应用之间的数据共享。变更数据捕获系统例如通过检测和复制对数据的变更(诸如由于数据库事务(诸如行操作)而可能对数据库表进行的变更),而不是拷贝整个表及其数据,来帮助解决这个需求。例如,可以使用这种方法来使源数据库中的数据与目标数据库中的数据同步。在一些数据复制环境中,变更数据捕获系统可以通过从事务日志文件中读取数据库事务的记录并在源服务器和目标服务器之间复制数据或对数据库的修改时使用该记录来进行操作。但是,这种方法一般要求捕获过程知道本地存储的事务日志文件的位置并能够直接访问事务日志文件。例如,如果源数据库服务器在与捕获过程不同的计算机上、或在不同的网络上或在访问受限的环境(诸如云环境)中运行,那么捕获过程可能无法访问其事务日志文件。缺乏远程事务处理能力限制了此类环境中变更数据捕获或数据复制的使用。技术实现要素:根据实施例,本文描述了用于从远程服务器(例如,远程数据库服务器)进行异构数据库复制的系统和方法。捕获过程可以被注册为远程服务器的复制从属设备,并被配置为从该服务器接收事务事件数据。与在远程服务器处对数据库的修改相关联的事务日志事件可以被处理,并在规范格式输出中作为变更数据被输出,以与一个或多个异构目标(例如目标数据库服务器或消息队列)一起使用。本文描述的系统和方法的技术目的包括该过程使得能够在可以位于不同计算机或网络上或在访问受限的环境(诸如云环境)内的远程服务器处捕获与数据库事务相关联的事务日志事件,而无需创建它的事务日志的附加副本。本文描述的系统和方法的优点包括捕获过程不要求对事务日志的本地访问,而是可以在与捕获过程不同的计算机处、或在不同的网络上或在访问受限的环境(诸如云环境)内访问事务日志。本文描述的系统和方法的另外的优点包括通过使用规范格式输出并根据每个特定目标形成命令或查询并将这些命令或查询应用于该目标而对在异构服务器(即,不同类型的服务器;例如在第一类型的远程服务器和第二类型的目标服务器之间)之间复制事务日志数据的支持。本文描述的系统和方法的另外的优点包括在远程服务器通信处启用与对数据库的修改相关联的事务日志事件的通信,而无需在该远程服务器处与原生应用程序接口(api)一起操作。本文描述的系统和方法的另外的优点包括捕获过程可以被配置为操作用于例如根据时间或索引来确定日志定位信息的过程或算法,该过程或算法启用与远程服务器的操作;因此,一旦这个命令被成功返回,服务器就可以从起始位置开始发送事务日志数据。附图说明图1图示了根据实施例的使用变更数据捕获系统来启用异构数据库复制。图2图示了根据实施例的包括事务日志的拷贝的变更数据捕获系统。图3图示了根据实施例的使用变更数据捕获系统来实现从远程服务器的异构数据库复制,包括使用作为(模拟的)复制从属设备操作的捕获过程。图4进一步图示了根据实施例的使用变更数据捕获系统来实现从远程服务器的异构数据库复制。图5进一步图示了根据实施例的使用变更数据捕获系统来实现从远程服务器的异构数据库复制。图6进一步图示了根据实施例的使用变更数据捕获系统来实现从远程服务器的异构数据库复制。图7图示了变更数据捕获系统如何提供实现在不同类型的服务器之间的异构数据库复制的规范格式输出。图8图示了根据实施例的用于提供从远程服务器的异构数据库复制的过程。图9进一步图示了根据实施例的用于提供从远程服务器的异构数据库复制的过程。图10图示了根据实施例的具有使用转储线程的远程服务器的变更数据捕获系统的示例。图11进一步图示了根据实施例的具有使用转储线程的远程服务器的变更数据捕获系统的示例。图12图示了根据实施例的用于提供从使用转储线程的远程服务器的异构数据库复制的示例过程。图13进一步图示了根据实施例的使用转储线程的示例过程。图14图示了根据实施例的使用客户端设备和用户界面来配置变更数据捕获系统以实现从远程服务器的异构数据库复制。图15图示了根据实施例的启用变更数据捕获系统的配置以实现从远程服务器的异构数据库复制的示例用户界面。图16进一步图示了根据实施例的启用变更数据捕获系统的配置以实现从远程服务器的异构数据库复制的示例用户界面。具体实施方式如上所述,在一些数据复制环境中,变更数据捕获(cdc)系统可以通过从事务日志文件中读取数据库事务的记录并在源服务器和目标服务器之间复制数据或对数据库的修改时使用该记录来进行操作。但是,这种方法一般要求捕获过程知道本地存储的事务日志文件的位置并能够直接访问事务日志文件。例如,如果源数据库服务器在与捕获过程不同的计算机上、或在不同的网络上或在访问受限的环境(诸如云环境)内运行,那么捕获过程可能无法访问其事务日志文件。虽然有各种限制,但可以用来解决这些问题的方法的示例包括:如果可以例如使用网络文件系统(nfs)可共享地安装事务日志所在的存储位置或目录,那么捕获过程可以将远程事务日志文件作为本地文件进行处理。但是,如上所述,例如,如果源数据库服务器在与捕获过程不同的计算机上、或在不同的网络上或在访问受限的环境(诸如云环境)内运行,那么捕获过程可能无法访问其事务日志文件。事务日志实用软件或程序可以被用于将事务日志从远程服务器下载并流式传输到本地计算机或机器,并在本地计算机或机器处对它们进行处理。但是,这包括创建事务日志文件的附加副本,从而导致输入/输出(i/o)和协调开销;并且还会在事务日志的读取和处理之间带来附加的处理层。在与变更数据捕获系统相同的计算机或机器上配置的分开的(原生)复制从属设备可以连接到远程服务器,在本地复制数据库事务,并为远程服务器上的那些数据库事务生成复制品(replica)事务日志,然后可以在本地对该复制品事务日志进行处理。但是,这种方法类似地包括创建事务日志文件的附加副本;连同相关联的i/o、协调开销;以及附加的处理层。从远程服务器的数据库复制根据实施例,本文描述了用于从远程服务器(例如,远程数据库服务器)进行异构数据库复制的系统和方法。捕获过程可以被注册为远程服务器的复制从属设备(slave),并被配置为从该服务器接收事务事件数据。与远程服务器处对数据库的修改相关联的事务日志事件可以被处理,并在规范格式输出中作为变更数据被输出,以与一个或多个异构目标(例如目标数据库服务器或消息队列)一起使用。本文描述的系统和方法的技术目的包括该过程使得能够在可以位于不同计算机或网络上或在访问受限的环境(诸如云环境)内的远程服务器处捕获与数据库事务相关联的事务日志事件,而无需为它的事务日志创建附加的副本。例如,根据实施例,本文描述的系统和方法使变更数据捕获系统能够使用来自远程服务器的事务日志数据,而不管该服务器的位置,并且无需知道事务日志的物理位置。根据实施例,可以经由用户界面或配置文件来指定远程服务器的连接参数,这使得捕获过程能够与服务器建立连接并从服务器接收事务日志数据。可以以与本地捕获类似的方式处理接收到的数据,包括例如将事务日志数据输出到规范格式输出(例如oraclegoldengate轨迹信息或文件),或另一种类型的文件格式。然后可以通过递送过程来读取规范格式输出并将规范格式输出应用于目标。利用这种方法,不需要创建事务日志文件的附加副本,也不需要在读取和处理事务日志之间的附加处理层。根据实施例,与捕获过程相关联的用户界面或配置文件(例如,捕获参数文件)使用户能够指定应当从中复制事务的远程服务器是“远程的”;以及任何必需的连接参数,例如远程数据库服务器名称、用户id和密码;然后系统可以使用它们来从该远程服务器复制数据库事务。图1图示了根据实施例的使用变更数据捕获系统来实现异构数据库复制。如图1中所示,根据实施例,可以在包括一个或多个计算机资源(例如,cpu、存储器)101的计算机处提供的变更数据捕获系统100可以被配置为从远程服务器系统106捕获变更数据,远程服务器系统106类似地包括一个或多个计算机资源107,并且还包括远程服务器102(例如,mysql服务器)。根据实施例,变更数据捕获系统可以包括捕获部件110,捕获部件110可以被提供为可由计算机系统或其它处理设备(例如oraclegoldengate部件)执行的软件或程序代码,其中捕获部件110可以包括启用与远程服务器的通信的提取处理器/应用程序接口(api)111;访问模块112(例如,在oraclegoldengate环境中的卖方访问模块(vam));以及cdc过程管理器116。根据实施例,访问模块可以包括一个或多个访问线程117和读取器线程118,用于例如经由到远程服务器系统的网络连接/访问119来访问数据源处的记录。根据实施例,远程服务器可以包括使(一个或多个)事务128能够被应用到数据库129的一个或多个节点,其中数据更改被写入事务日志104(例如,在mysql环境中的mysql二进制日志或mysqlbinlog文件)。根据实施例,捕获过程150和递送过程153将从数据源读取的变更数据转换成规范格式输出120,该规范格式输出120包括指示由(一个或多个)数据库事务对数据库造成的修改的变更数据121,以供一个或多个异构目标130消耗,在一些实施例中,这包括根据特定目标形成命令或查询,并将这些命令或查询应用于该目标。根据实施例,一个或多个目标可以是例如目标服务器131或其它目标系统132,其示例可以包括数据库、消息队列或其它类型的目标服务器或系统中的一个或多个。根据实施例,远程服务器可以与一个或多个复制从属设备141、142相关联,这使得对数据库的变更能够被复制到其它节点以供在远程服务器系统内使用。基于日志的复制如上所述,虽然变更数据捕获系统可以通过从事务日志文件中读取数据库事务的记录来进行操作,但是如果源数据库服务器在与捕获过程不同的计算机上、或在不同的网络上或在访问范围受限的环境(诸如云环境)内运行,那么捕获过程可能无法访问其事务日志文件。图2图示了根据实施例的包括事务日志的拷贝的变更数据捕获系统。如图2中所示,根据实施例,远程服务器102可以例如与软件实用工具(例如,在mysql环境中的mysqlbinlog实用工具)相关联,该软件实用工具可以被用于下载、流式传输或以其它方式将事务日志从远程服务器拷贝到运行捕获过程的计算机。这种方法包括将事务日志写入运行捕获过程的计算机上的一个或多个中间或临时事务日志文件112。然后,捕获过程可以读取并处理这个中间文件,以及处理数据库事务并将数据库事务输出或写入到一个或多个规范格式输出(例如,轨迹(trail)信息或轨迹文件),以供递送过程读取并应用于目标(例如,数据库服务器)。但是,如上所述,这种方法的问题在于它包括创建事务日志文件的附加副本;连同相关联的i/o、协调开销;以及附加的处理层。捕获过程为了解决以上考虑,根据实施例,捕获过程可以代替地被注册为远程服务器的复制从属设备,并且被配置为从该服务器接收包括事务事件数据的信息。图3图示了根据实施例的使用变更数据捕获系统来实现从远程服务器的异构数据库复制,包括使用作为(模拟的)复制从属设备操作的捕获过程。如图3中所示,根据实施例,远程服务器被配置为将事务日志数据递送到其复制从属设备(replicationslave)。复制从属设备可以请求事务日志数据,只要它们可以连接到远程服务器即可。复制从属设备可以位于运行远程服务器的同一个计算机或机器上,或者可以位于不同的机器上。根据实施例,捕获过程被配置(154)为作为远程服务器的(模拟的)复制从属设备151出现并操作,包括使用用于确定从属服务器标识符(id)的过程或算法157,其中从属服务器id155实现与远程服务器的操作。下面说明用于确定从属服务器id的示例过程或算法。一旦捕获过程连接到服务器以作为(模拟的)复制从属设备出现并操作,它就可以在循环(loop)中从服务器请求数据。根据实施例,用户可以使用捕获参数文件或指定捕获参数148的其它方式或手段来配置远程服务器连接参数。捕获过程可以使用这个信息建立与服务器的连接,并开始从服务器接收事务日志数据,而不管服务器位于何处。一旦捕获过程开始从远程服务器读取事务日志数据,该数据然后就可以以与本地捕获类似的方式被处理,包括例如将事务日志数据输出到规范格式输出或文件。根据实施例,将捕获过程注册为远程服务器的复制从属设备并且将捕获过程配置为从该服务器接收包括事务事件数据的信息使得指示在与远程服务器相关联的数据库处修改数据的数据库事务的事务日志事件能够被处理和输出,以与目标数据库服务器一起使用。图4进一步图示了根据实施例的使用变更数据捕获系统来实现从远程服务器的异构数据库复制。如图4中所示,根据实施例,捕获过程作为客户端或客户端过程连接到远程服务器。当捕获过程连接到远程服务器时,它首先向服务器注册为复制从属设备。根据实施例,诸如“注册从属设备”命令152之类的命令(例如,在mysql环境中的com_register_slave命令)可以通过捕获过程被发送到远程服务器,以便将其自身注册为远程服务器的复制从属设备。根据实施例,在与远程服务器建立连接之后并且在远程服务器可以将任何数据发送到捕获过程之前,“注册从属设备”命令使捕获过程能够与远程服务器进行通信。命令自变量可以包括与捕获过程相关联的远程服务器的网络地址、远程服务器上的用户名、密码和从属服务器id(例如,server_id)。根据实施例,在与远程服务器建立连接之后,捕获过程发送具有连接参数及其从属服务器id的“注册从属设备”命令。然后,远程服务器可以将捕获过程注册为其复制从属设备之一。图5进一步图示了根据实施例的使用变更数据捕获系统来实现从远程服务器的异构数据库复制。如图5中所示,根据实施例,一旦捕获过程被注册为远程服务器的复制从属设备,捕获过程就可以例如使用用于“接收事务(tx)事件”的命令156请求服务器发送数据,包括事务(tx)事件数据158。例如,根据实施例,为了从服务器接收事务日志数据,在向远程服务器注册之后,服务器可以对捕获过程起动转储线程;捕获过程可以通过该转储线程接收事务日志数据;并且其中与转储线程相关联的从属服务器id与前一步中注册的从属服务器id相同,并经由该转储线程请求事务事件数据。根据其它实施例,取决于远程服务器的类型,捕获过程可以代替地使用使它能够被注册为远程服务器的复制从属设备并被配置为从该服务器接收信息(包括事务事件数据)的其它方法。图6进一步图示了根据实施例的使用变更数据捕获系统来实现从远程服务器的异构数据库复制。如图6中所示,根据实施例,捕获过程被配置为操作用于确定实现与远程服务器的操作的日志定位信息的过程或算法161。一旦这个命令被成功返回,服务器就可以从发送到服务器的起始位置162(例如,日志编号和位置)开始发送事务日志数据。然后,捕获过程可以例如在循环163中的cli_safe_read调用中从服务器请求数据,然后可以将该数据作为输出164写到例如规范格式输出。设置起始位置如上所述,根据实施例,捕获过程被配置为操作用于确定实现与远程服务器的操作的日志定位信息的过程或算法。一旦这个命令被成功返回,服务器就可以从起始位置开始发送事务日志数据。例如,根据实施例,可以发送具有事务日志名称和起始偏移位置的命令(例如,com_binlog_dump)。初始定位可以由时间戳、偏移量和默认值支持。根据实施例,当通过日志偏移量设置初始位置时,可以将从用户接收的日志编号映射到日志名称。然后,将用户给出的二进制日志名称和起始偏移量供应给命令,并将该命令发送到服务器。根据实施例,事件的时间戳可以与要被定位的时间戳匹配。在特定的binlog文件中找到正确的匹配后,检索与该时间戳对应的事件的初始偏移量,然后将起始位置设置在该偏移量处。根据实施例,可以从在捕获过程开始时创建的binlog的列表中检索第一二进制日志名称,并发送默认日志偏移量。根据实施例提供了以上示例,以说明设置起始位置的各种方法;根据其它实施例,可以使用其它方法。异构数据库复制图7图示了变更数据捕获系统如何提供实现在不同类型的服务器之间的异构数据库复制的规范格式输出。如上所述,根据实施例,与远程服务器处对数据库的修改相关联的事务日志事件可以被处理,并在规范格式输出中作为变更数据输出,以与一个或多个异构目标(例如目标数据库服务器或消息队列)一起使用。例如,如图7中所示,根据实施例,通过根据每个特定目标形成命令或查询,然后将这些命令或查询应用于该目标,捕获过程以及一个或多个递送过程176可以被用于转换从数据源(例如第一类型的远程服务器)读取的变更数据转换成规范格式输出,以供一个或多个异构目标(在这个示例中包括第二类型的目标服务器172和/或第三类型的目标服务器174)消耗。数据库复制方法图8图示了根据实施例的用于提供从远程服务器的异构数据库复制的过程。如图8中所示,根据实施例,一种用于从远程服务器(例如,远程服务器)进行异构数据库复制的方法可以包括在步骤182处设置到远程服务器的连接。在步骤184处,过程可以包括将捕获过程(例如,oraclegoldengate捕获)注册为作为远程服务器的(模拟的)复制从属设备操作的捕获过程。在步骤186处,过程可以包括配置捕获过程以从远程服务器接收事务事件数据。在步骤188处,过程可以包括处理远程服务器事务日志事件,以被输出或写为规范格式输出,以便与目标服务器一起使用。在步骤190处,提供规范格式输出以供与具有与远程服务器不同的服务器类型的一个或多个异构目标服务器一起使用。图9进一步图示了根据实施例的用于提供从远程服务器的异构数据库复制的过程。如图9中所示(其中步骤184和186可以如上所述),根据实施例,过程可以包括在步骤192处确定现有的复制从属设备列表。在步骤193处,为作为(模拟的)复制从属设备操作的捕获过程确定从属服务器id。在步骤194处,捕获过程被注册为远程服务器的(模拟的)复制从属设备。在步骤196处,设置起始位置以与事务日志一起使用。在步骤197处,从起始位置开始处理远程服务器处的事务日志。在步骤198处,事务日志事件被读取并被用于准备规范格式输出。示例实施方式出于说明的目的,以下部分提供了对用于从分布式数据源系统(诸如例如操作mysql数据库的mysql服务器)捕获变更数据的示例实施例的描述。根据其它实施例,可以支持其它类型的分布式数据源或数据库。为了说明的目的,下面提供各种细节以便提供对各种实施例的理解。但是,也可以在没有具体细节的情况下实践实施例。以下描述并非旨在进行限制。图10图示了根据实施例的具有使用转储线程206的远程服务器的变更数据捕获系统的示例。如图10中所示,根据实施例,捕获过程连接到作为客户端或客户端过程的远程服务器系统202和远程服务器(例如,mysql服务器)204。当捕获过程连接到远程服务器时,它首先向服务器注册为复制从属设备。根据实施例,可以通过捕获过程将“注册从属设备”命令(例如,在mysql环境中的com_register_slave命令)发送到远程服务器,以便将其自身注册为远程服务器的复制从属设备。根据实施例,并且如上所述,在与远程服务器建立连接之后并且在远程服务器可以向捕获过程发送任何数据之前,“注册从属设备”命令使捕获过程能够与远程服务器通信。命令自变量可以包括与捕获过程相关联的远程服务器的网络地址、远程服务器上的用户名、密码和从属服务器id(例如,server_id)。根据实施例,在与远程服务器建立连接之后,捕获过程发送具有连接参数及其从属服务器id的“注册从属设备”命令。然后,远程服务器可以将捕获过程注册为其复制从属设备之一。图11进一步图示了根据实施例的具有使用转储线程的远程服务器的变更数据捕获系统的示例。如图11中所示,根据实施例,并且如上所述,捕获过程被配置为操作用于确定实现与远程服务器的操作的日志定位信息的过程或算法。一旦这个命令被成功返回,服务器就可以从发送到服务器的起始位置(例如,日志编号和位置)开始发送事务日志数据。然后,捕获过程可以例如在循环210中的cli_safe_read调用中从服务器请求数据,然后可以将该数据作为输出写到规范格式输出。根据实施例,“转储线程”命令208(例如,在mysql环境中的com_binlog_dump命令)在远程服务器内部创建转储线程,并且捕获过程经由这个转储线程开始通过网络接收事务日志数据。“转储线程”命令与事务(二进制)日志名称、起始位置和标志一起被发送到服务器,其中标志值指示在读取最后一个事务日志中的最后一个数据集之后转储线程是否继续。设置到远程服务器的连接根据实施例,捕获过程创建到远程服务器的专用连接,以便将捕获过程设置为作为(模拟的)复制从属设备出现并操作,并从远程服务器持续地检索事件流数据。在建立连接之后,还设置以下连接属性:mysql_opt_ssl_mode:客户端的ssl要求。mysql_opt_protocol:默认通信协议为tcp。mysql_opt_connect_attr_add:这将连接信息添加到performance_schema.session_connect_attrs中;例如,可以添加程序名称,这可以有助于监视程序或对程序进行故障排除。根据实施例,由于例如mysql服务器不支持非校验和感知的复制从属设备,因此可以向远程服务器通知客户端是否是校验和感知的。例如,set@master_binlog_checksum='none'告诉服务器客户端是否理解校验和算法。如果客户端未通知远程服务器,那么服务器将在cli_safe_read上返回错误,而不是将数据发送回客户端。捕获过程的注册根据实施例,远程服务器注册其所有复制从属设备的列表,以用于检查点和簿记(bookkeeping)目的。如上所述,根据实施例,命令com_register_slave可以由捕获过程发送到远程服务器,以使其自身被注册为服务器的复制从属设备,并且可以与连接参数(例如,远程服务器的网络地址、用户id和密码)以及从属服务器id一起被供应。根据实施例,利用其注册捕获过程的从属服务器id在所有现有的远程服务器复制从属设备中是唯一的。如果向捕获过程供应的从属服务器id与任何其它现有的复制从属设备过程冲突,那么服务器终止已经运行的过程。唯一的从属服务器id由捕获过程生成,并作为命令com_register_slave的命令参数被发送到服务器,如下所述。复制从属设备列表根据实施例,“示出从属设备主机”命令提供被注册为远程服务器的复制从属设备的所有主机的详细信息。这个列表包括实际/真实的复制从属设备,以及被注册为复制从属设备但不是远程服务器的实际/真实的复制从属设备的过程,例如,作为(模拟的)复制从属设备操作的捕获过程。根据实施例,这个命令的输出中的“server_id”列给出了所有复制从属服务器的id。“server_id”列中的值与将命令com_register_slave发送到远程服务器时由捕获过程供应的值相同。这个变量被服务器用作内部变量,并且“示出从属设备主机”命令提供了获得客户端应用中所有复制从属服务器的server_id值的方法。来自这个命令的输出被解析以获取“server_id”值,然后将这些值存储在排序的列表中。下面提供的示例(示例1)说明了根据实施例的确定所有从属服务器id的列表的示例软件方法或程序代码:示例1从属服务器id确定如上所述,根据实施例,捕获过程被配置为作为远程服务器的(模拟的)复制从属设备出现并操作,包括使用用于确定实现与远程服务器的操作的从属服务器id的过程或算法。根据实施例,注册的复制从属设备的从属服务器id必须是唯一值,并且必须不与其它/现有的注册的复制从属设备冲突。为了说明的目的,下面提供用于生成唯一的从属服务器id的示例过程或算法。根据其它实施例,可以使用其它方法来确定唯一的服务器id值。如果最低从属服务器id大于1,那么递减最低从属服务器id并将结果值指派给捕获过程。如果两个现有的连续从属服务器id之间存在间隙,那么将下界从属服务器id递增1,并将结果值指派给捕获过程。如果以上两种情况均不成立,那么将最高从属服务器id递增1,并将结果值指派给捕获过程。根据实施例,使用上述过程或算法生成的从属服务器id跨所有远程服务器的复制从属设备以及跨捕获部件的所有实例都应当是唯一的。为了为捕获过程的每个实例创建唯一的从属服务器id值,可以在临界区段内实现该过程或算法(逻辑),这保证对于捕获过程而言从属服务器id值可以作为唯一的值被生成。在一些情况下,用户可以为远程服务器创建分开的复制从属设备,并且可以在创建新的复制从属设备之前使现有过程终止。在这种情况下,用户应当注意不要创建具有与任何现有复制从属设备冲突的id的复制从属设备。下面提供的示例(示例2)说明了根据实施例的用于在捕获过程内生成从属服务器id(例如,server_id)的示例软件方法或程序代码:示例2上面举例说明的示例过程或算法是作为示例提供的;根据其它实施例,可以使用其它方法来确定唯一的服务器id值。com_register_slave命令根据实施例,在生成server_id值之后,通过向server_id、远程服务器名称、用户id和密码给出值以作为命令com_register_slave的参数,将该命令发送到远程服务器。下面提供的示例(示例3)说明了根据实施例的用于注册捕获过程以作为远程服务器的(模拟的)复制从属设备进行操作的示例软件方法或程序代码:示例3捕获过程作为转储线程根据实施例,在将捕获过程注册为远程服务器的复制从属服务器之后,命令com_binlog_dump被发送到远程服务器。根据实施例,向远程服务器发送命令com_binlog_dump创建作为这个远程服务器的(模拟的)复制从属设备操作的捕获过程,并且保持远程捕获binlog事件。在向远程服务器发送之前,命令com_binlog_dump与其参数值一起被打包。以下是用于命令com_binlog_dump的参数:server_id:捕获过程作为(模拟的)复制从属设备进行操作,并且应当向它给出server_id,远程服务器通过该server_id来识别它。这是使用与将捕获过程注册为远程服务器的复制从属设备时使用的相同的server_id值来设置的。如果这个server_id与任何其它正在运行的(模拟的或实际/真实的)复制从属设备设备冲突,那么已经运行的实例将被杀死。binlog名称:对于远程捕获,由于命令com_binlog_dump需要binlog文件名,因此强制预先提供binlog文件名。然后,服务器开始在那个二进制日志之后寻找要提供的数据。如果二进制日志不存在,那么命令执行返回指定相同原因的错误。起始位置:命令com_binlog_dump仅接受4个字节作为起始位置偏移量,因此对于远程捕获,不能支持大小超过4gb的二进制日志文件。转储标志:在com_binlog_dump中可以设置两个标志。标志之一是binlog_dump_non_block;另一个是0。将标志设置为binlog_dump_non_block将在读取日志结尾之后断开捕获过程(捕获应用)。捕获过程持续地保持读取,因此该标志应当设置为0。根据实施例,在填充所有上述字段之后,使用simple_command库函数将命令com_binlog_dump发送到服务器。下面提供的示例(示例4)说明了根据实施例的用于在捕获过程内创建转储线程的示例软件方法或程序代码:示例4根据实施例,一旦命令com_binlog_dump被发送到服务器,捕获过程就可以在循环中使用例如mysql客户端库函数cli_safe_read或mysql_binlog_fetch来从远程服务器读取binlog事件数据流。设置起始位置如上所述,根据实施例,捕获过程被配置为操作用于确定实现与远程服务器的操作的日志定位信息的过程或算法。一旦这个命令被成功返回,服务器就可以开始从发送到服务器的起始位置开始发送事务日志数据。根据实施例,可以发送具有binlog(事务日志)名称和起始偏移位置的命令,例如com_binlog_dump。在com_binlog_dump成功之后,远程服务器将开始从该binlog中的该偏移量开始发送事务日志数据。命令com_binlog_dump设置用于捕获过程的初始读取位置。根据实施例,可以通过时间戳、偏移量和默认值来支持初始定位。命令com_binlog_dump被用于实现所有这些用于远程事务复制的定位类型。通过偏移量来设置起始位置-com_binlog_dump根据实施例,通过日志偏移量来设置初始位置对于使用命令com_binlog_dump是自然的。从用户接收到的日志编号被映射到二进制日志名称。然后,由用户给出的二进制日志名称和起始偏移量将供应给命令com_binlog_dump。该命令被发送到服务器,并且远程服务器从该位置开始发送binlog事件。通过时间戳来设置起始位置根据实施例,在捕获过程开始时创建所有现有事务日志文件的列表以及它们的时间戳(格式描述符事件时间戳)。稍后,在通过时间戳进行定位时,所有binlog文件名称都以相反的次序被发送到com_binlog_dump,并从头开始读取。事件的时间戳与要定位的时间戳匹配。在特定的binlog文件中找到正确的匹配后,检索与该时间戳对应的事件的初始偏移量,然后通过发送命令com_binlog_dump将起始位置设置在该偏移量处。设置起始位置默认值根据实施例,命令com_binlog_dump强制它传递日志编号和偏移量作为起始位置。可以从在捕获过程开始时创建的binlog列表中检索第一个二进制日志名称,并且默认日志偏移量应当被发送为4,这是mysqlbinlog文件中的第一个有效偏移量。事务日志的处理根据实施例,事务日志存储发生在例如mysql实例的任何数据库中的每个事务。事务日志存储insert、update、delete语句、ddl语句(例如,truncate、alter等)。这些事务日志被称为“预写日志”(wal),因为它们首先被写入,然后仅将数据写到数据库中的实际表。如果数据库崩溃,那么mysql数据库将使用这些事务日志进行它的恢复。mysql事务日志以各种事件的形式存储这种信息,其中每个事件特定于事务中的特定任务,例如:查询事件:查询事件示出事务的开始或ddl语句的语句。tablemap事件:tablemap事件存储特定于记录到事务日志中的每个表的元数据。rowslogevent:rowslogevent包含表的实际列数据,用于诸如例如insert/delete/update语句之类的操作。xid事件:xid事件指示特定事务的提交。rotateevent:旋转事件指示一个事务日志的结尾并且提供相继事务日志的名称。stop事件:stop(停止)事件指示服务器已停止。事务日志中有许多这样的事件,但这些是最重要的事件。事务日志事件的读取根据实施例,与捕获过程相关联的用户界面或配置文件(例如如上所述的捕获参数文件)使用户能够指定要从中复制事务的服务器是“远程的”;以及连接参数,例如远程服务器名称、用户id和密码;然后系统可以使用它们来从该远程服务器复制数据库事务。根据实施例,在循环中调用mysqlclient库例程cli_safe_read以从远程服务器接收binlog事件缓冲区的连续流。cli_safe_read接收完整的事件数据。根据实施例,对于小事件,传递给cli_safe_read或mysql_binlog_fetch的网络缓冲区接收完整事件的数据。对于行日志事件,无论大小如何,都将完整的行发送到客户端。根据实施例,在大对象(lob)的情况下,假设是用户具有足够的存储器来处置存储器中的大lob行。根据实施例,在多行事件的情况下,可以使用mysqld选项binlog-row-event-max-size将多个较小的行组合并发送到客户端。取决于网络带宽和存储器可用性,将它设置为合理的大小会节省网络上的往返延迟。根据实施例,然后基于不同的事件类型将事件缓冲区处理成不同的事件对象。不需要高速缓存管理,因为每个cli_safe_read调用都返回完整的事件数据。对于远程捕获,不要求处理为本地捕获处理的所有事件。库调用在其自身内处置这些事件,包括例如query(查询)事件、tablemap事件、xid事件、writerows事件、rotate事件和updaterows事件,其中针对这些事件的处理与本地捕获中的处理几乎相同。其它事件(诸如例如stop和gtid事件)不需要,因此将被忽略。根据实施例,事件被处理并输出或写到数据库不可知的输出,例如作为规范格式输出。然后,递送过程可以读取事务、根据目标数据库服务器形成查询,并将那些查询应用于目标数据库服务器。图12图示了根据实施例的用于提供从使用转储线程的远程服务器的异构数据库复制的示例过程。如图12中所示,根据实施例,一种用于从远程服务器(例如,远程服务器)进行异构数据库复制的方法可以包括在步骤222处设置到远程服务器(例如,mysql)的连接。在步骤224处,过程可以包括将捕获过程(例如,oraclegoldengate捕获)注册为作为远程服务器的(模拟的)复制从属设备操作的捕获过程。在步骤226处,过程可以包括将捕获过程配置为远程服务器的转储线程。在步骤228处,过程可以包括处理远程服务器事务日志事件,以被输出或写为例如轨迹信息(例如,oraclegoldengate轨迹文件)以与目标数据库服务器(例如,oracle、mysql、db2)一起使用。在步骤230处,提供规范格式输出以供与具有和远程服务器不同的服务器类型的一个或多个异构目标服务器一起使用。图13进一步图示了根据实施例的使用转储线程的示例过程。如图13中所示(其中步骤224和226可以如上所述),根据使用例如mysql环境的实施例,过程可以包括在步骤232处确定现有的复制从属设备列表。在步骤233处,为作为(模拟的)复制从属设备操作的捕获过程确定从属服务器id。在步骤234处,“注册从属设备”命令(例如,com_register_slave)被发送到远程服务器。在步骤236处,在“转储线程”命令(例如,com_binlog_dump)之后,设置起始位置。在步骤237处,从起始位置开始处理远程服务器处的事务日志。在步骤238处,事务日志事件被读取并被用于准备规范格式输出。用户界面和管理图14图示了根据实施例的使用客户端设备和用户界面来配置变更数据捕获系统以实现从远程服务器的异构数据库复制。如图14中所示,根据实施例,包括设备硬件251(例如、处理器/cpu、存储器)、客户端软件应用(例如,web浏览器)252和图形用户界面254的客户端(计算机)设备250使管理员260能够查看并修改远程服务器捕获配置256,例如以便用捕获参数来配置cdc过程管理器。如上所述,根据实施例,捕获过程可以使用这个信息来建立到远程服务器的连接,并且不管服务器位于何处,都开始从服务器接收事务日志数据。一旦捕获过程开始从远程服务器读取事务日志数据,然后就可以按照与本地捕获类似的方式处理这个数据,包括例如将事务日志数据输出为规范格式输出。图15图示了根据实施例的启用变更数据捕获系统的配置以实现从远程服务器的异构数据库复制的示例用户界面。如图15中所示,根据实施例,图形用户界面可以使管理员能够查看并修改捕获参数,诸如例如集群详细信息,包括集群端点、读取器端点或网络可访问端口。图16进一步图示了根据实施例的启用变更数据捕获系统的配置以实现从远程服务器的异构数据库复制的示例用户界面。如图16中所示,根据实施例,图形用户界面还可以使管理员能够查看并修改捕获参数,诸如例如事务日志格式或事务日志的其它特点。作为示例,并且根据实施例,提供了用户界面及其使用的以上示例,以说明管理员可以用来查看并修改远程服务器捕获配置(例如,以便用捕获参数来配置cdc过程管理器)的各种界面;根据其它实施例,可以提供其它类型的用户界面。根据各种实施例,可以使用包括根据本公开的教导编程的一个或多个处理器、存储器和/或计算机可读存储介质的一个或多个传统的通用或专用计算机、计算设备、机器或微处理器方便地实现本文的教导。基于本公开的教导,熟练的程序员可以容易地准备适当的软件编码,如对于软件领域的技术人员来说明显的。在一些实施例中,本文的教导可以包括计算机程序产品,该计算机程序产品是具有存储在其上/其中的指令的计算机可读存储介质(媒介),指令可以用于对计算机进行编程以执行目前教导的任何处理。此类介质的示例可以包括但不限于非暂态介质,诸如硬盘驱动器、硬盘、硬驱动器、固定盘或其它机电数据存储设备、软盘、光盘、dvd、cd-rom、微驱动器、以及磁-光盘、rom、ram、eprom、eeprom、dram、vram、闪存设备、磁卡或光卡、纳米系统或适用于指令和/或数据的非暂态存储的其它类型的存储介质或设备。此类介质的其它示例包括暂态介质,诸如用于在计算机内部或计算机之间传输信号的载波信号或传输介质。已经出于说明和描述的目的提供了前述描述。其并非旨在穷举或将保护范围限制到所公开的精确形式。许多修改和变化对于本领域技术人员来说是明显的。例如,虽然使用从mysql数据库环境捕获数据的示例来说明本文描述的许多特征和技术;但是,根据各种实施例,特征和技术可以类似地用于从其它类型的分布式数据源系统、数据库、数据结构或数据流中捕获数据。选择和描述实施例是为了最好地解释本教导的原理及其实际应用,从而使得本领域其他技术人员能够理解各种实施例并且具有适合于预期的特定用途的各种修改。本发明的范围旨在由以下权利要求及其等同物定义。本公开的各方面在以下编号的条款中阐述:1.一种用于从远程服务器进行异构数据库复制的系统,包括:计算机,包括处理器,以及在其上操作的变更数据系统,该变更数据系统使得能够在数据库服务器之间复制数据;其中捕获过程向远程服务器注册,并且被配置为接收事务日志事件,该事务日志事件指示在与远程服务器相关联的数据库处修改数据的数据库事务,其中事务日志事件被处理并在规范格式输出中作为变更数据输出,以与一个或多个目标数据库服务器或其它系统一起使用。2.如条款1所述的系统,其中捕获过程被注册为作为远程服务器的复制从属设备操作;以及其中,取决于远程服务器的类型,捕获过程使用方法以被注册为远程服务器的复制从属设备并从该服务器接收包括事务事件数据的信息。3.如条款1或条款2所述的系统,其中环境是变更数据捕获系统,并且其中事务日志事件被写到输出或轨迹文件,以供变更数据捕获系统与目标数据库服务器一起使用。4.如条款3所述的系统,其中变更数据捕获系统在与远程服务器不同的计算机处或不同的网络上提供。5.如前述条款中的任一项所述的系统,其中远程服务器在访问受限的环境或云环境内提供。6.如前述条款中的任一项所述的系统,其中远程服务器是mysql服务器。7.一种用于从远程服务器复制异构数据库的方法,包括:在包括处理器的计算机处,提供在其上操作的使得能够在数据库服务器之间复制数据的变更数据系统,以及向远程服务器注册并被配置为进行以下操作的捕获过程:接收事务日志事件,该事务日志事件指示在与远程服务器相关联的数据库处修改数据的数据库事务,其中事务日志事件被处理并在规范格式输出中作为变更数据输出,以与一个或多个目标数据库服务器或其它系统一起使用。8.如条款7所述的方法,其中捕获过程被注册为作为远程服务器的复制从属设备操作;以及其中,取决于远程服务器的类型,捕获过程使用方法以被注册为远程服务器的复制从属设备并从该服务器接收包括事务事件数据的信息。9.如条款7或条款8所述的方法,其中环境是变更数据捕获系统,并且其中事务日志事件被写到输出或轨迹文件,以供变更数据捕获系统与目标数据库服务器一起使用。10.如条款9所述的方法,其中变更数据捕获系统在与远程服务器不同的计算机处或不同的网络上提供。11.如条款7至10中的任一项所述的方法,其中远程服务器在访问受限的环境或云环境内提供。12.如条款7至11中的任一项所述的方法,其中远程服务器是mysql服务器。13.一种计算机可读存储介质,包括存储在其上的指令,所述指令在由一个或多个计算机读取并执行时使所述一个或多个计算机执行方法,该方法包括:提供使得能够在数据库服务器之间复制数据的变更数据系统,以及向远程服务器注册并被配置为进行以下操作的捕获过程:接收事务日志事件,该事务日志事件指示在与远程服务器相关联的数据库处修改数据的数据库事务,其中事务日志事件被处理并在规范格式输出中作为变更数据输出,以与一个或多个目标数据库服务器或其它系统一起使用。14.如条款13所述的计算机可读存储介质,其中捕获过程被注册为作为远程服务器的复制从属设备操作;以及其中,取决于远程服务器的类型,捕获过程使用方法以被注册为远程服务器的复制从属设备并从该服务器接收包括事务事件数据的信息。15.如条款13或条款14所述的计算机可读存储介质,其中环境是变更数据捕获系统,并且其中事务日志事件被写到输出或轨迹文件,以供变更数据捕获系统与目标数据库服务器一起使用。16.如条款15所述的计算机可读存储介质,其中变更数据捕获系统在与远程服务器不同的计算机处或不同的网络上提供。17.如条款13至16中的任一项所述的计算机可读存储介质,其中远程服务器在访问受限的环境或云环境内提供。18.如条款13至17中的任一项所述的计算机可读存储介质,其中远程服务器是mysql服务器。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1