当前位置: 首页 > Linux

OGG实现两个Mysql(Linux系统)之间的数据同步

时间:2023-04-06 02:26:10 Linux

一、OGG同步介绍OGG是一款基于日志的结构化数据复制软件OGG可以实现大量数据的实时抓取和传递,实现源库和target数据库的数据同步,保持至少10ms的数据延迟。2.OGG部署在典型的OGG环境中,会有两个数据库,同时也会有两个OGG实例运行OGG支持远程部署,即OGG软件没有安装在数据库主机上,而是安装在单独的一台machine,负责数据的抽取和传递,但是OGG不支持像MySQL一样对源库进行远程抽取和传递1.OGG同步原理OGG同步过程大致负责源OGG源库更改数据并传递更改后的数据数据到目标OGG。目标OGG负责解析并持久化到目标数据库。流程如下:流程功能运行位Manager启动、监控、重启Goldengate的其他进程,并报告错误和事件、分配数据存储空间、发布阈值报告等。目标端和源端只有一个Manager进程sourceOGG,目标端OGGExtract负责从源端数据表或日志中抓取数据,保存在SourceTrail文件中。源端OGGDataPump用于抓取SourceTrail,并将trail通过TCP/IP协议以数据块的形式发送给目标OGG。源OGGReplicat是数据传输的最后一站。负责读取目标trail文件中的内容,解析成DML或DDL语句,然后应用到目标数据库中的TargetOGG3、OGG下载安装OGG下载地址:https://www.oracle.com/middle...OGG版本选择:OracleGoldenGate21.1.0.0.1forMySQLonLinuxx86-64OGG安装:将下载的OGG压缩包解压到本地,将其中的ggs_Linux_x64_MySQL_64bit.tar上传到Linux服务器的自定义ogg文件夹中,直接解压(tar-xvfggs_Linux_x64_MySQL_64bit.tar)使用ggsci创建ogg相关子目录:先输入./ggsci进入ggsci,然后输入createsubdirs命令创建相关子目录。如果第一步输入./ggsci无法进入,请输入lddggsci查看依赖。报错,网上大部分文章都缺少libnnz11.so,类似,如果出现,可以按照这些文章处理)下图正常安装可以进入ggsci4.OGG源码配置配置管理processManager#输入配置管理进程命令GGSCI(localhost.localdomain)1>editparammgr#指定端口号port7809#绑定可用端口列表dynamicportlist7840-7939#定期清理trail文件purgeoldextracts/ogg/dirdat/*,usecheckpoints,minkeepdays1#enterstartmanagementprocesscommand(close:stopmgr)GGSCI(localhost.localdomain)2>startmgrManagerstarted.#回车查看Status命令检查是否启动GGSCI(localhost.localdomain)3>infoallProgramStatusGroupLagatChkptTimeSinceChkptMANAGERRUNNING下图是实际运行的配置提取过程Extract#Input配置提取过程命令GGSCI(localhost.localdomain)2>editparamexta#定义提取进程名称extractexta#指定OGG连接数据库的地址、账号和密码sourcedbshop_system@192.168.16.99:3306useridoggpasswordogg#指定写入本地extrail的哪个队列/ogg/dirdat/ea#DefinediscardfileLocation,如果在处理过程中有记录错误,会写入这个文件discardfile/ogg/dirrpt/exta.dsc,append#指定解析数据库日志时需要的特殊参数TranLogOptionsAltLogDest/mysql/binlog/master-bin.index#定义要复制的表,后接;endtableshop_system.*;GGSCI(localhost.localdomain)5>addextractexta,tranlog,beginnowEXTRACTadded.#添加提取源文件的位置和大小GGSCI(localhost.localdomain)6>addexttrail/ogg/dirdat/ea,提取extaEXTTRAIL添加。下图为DataPumpGGSCI(localhost.localdomain)实际运行配置投递流程15>editparamdmpa#定义投递流程名称extractdmpapassthru#源数据库地址,用户名sourcedbshop_system@192.168.16.99:3306useridoggpasswordogg#目标地址rmthost192.168.10.12,mgrport7809,compress#指定写入文件rmttrail/ogg/dirdat/dadynamicresolutionnumfiles3000#Deliverytabletableshop_system.test_ogg;GGSCI(localhost.localdomain)16>添加提取dmpa,添加extrailsource/ogg/dirdat/eaEXTRACT。GGSCI(localhost.localdomain)17>添加rmttrail/ogg/dirdat/da,提取dmpaRMTTRAIL添加。下图是实际配置数据结构不一致时的表定义文件。GGSCI(localhost.localdomain)23>editparamdefgendefsfile./dirdef/testdb.defsourcedbpoint_manager@192.168.10.11:3306useridogg,passwordoggtablepoint_manager.test_ogg;GGSCI(localhost.localdomain)26>exit生成表定义文件(生成成功后复制一份到目标OGG的dirdef目录下)[root@masterdbogg]#./defgenparamfile./dirprm/defgen.prm5.OGG目标配置配置管理进程ManagerGGSCI(localhost.localdomain)3>editparammgrport7809dynamicportlist7840-7939purgeoldextracts/ogg/dirdat/*,usecheckpoints,minkeepdays1GGSCI(localhost.localdomain)5>startmgrManagerstarted.GGSCI(localhost.localdomain)6>infoall程序状态自从ChkptMANAGER运行配置检查表GGSCI(localhost.localdomain)9>dloginsourcedbshop_system@192.168.10.12:3306useridoggpasswordogg成功登录到database.GGSCI(localhost.localdomainDBLOGINascheckroot)10pointaddtableshop_system。checkpoint成功创建检查点表shop_system.checkpoint.GGSCI(localhost.localdomainDBLOGINasroot)11>editparams./GLOBALScheckpointtableshop_system.checkpoint配置应用进程ReplicatGGSCI(slavedbDBLOGINasogg)13>editparamsrepa#defineapplicationprocessNamereplicatrepa#配置目标数据库地址,用户名和密码targetdbtestdb_repl@192.168.10.12:3306useridoggpasswordogghandlecollisions#假设两端数据结构不一致,使用该参数指定源端的数据结构定义文件,需要GlodenGate提供的工具生成sourcedefs/ogg/dirdef/testdb.def#定义discardfile文件位置,如果在处理过程中有记录错误,会写入到这个文件中,建议参数值为1024mdiscardfile/ogg/dirrpt/repa.dsc,purge#用于指定源表和目标表之间的映射关系mappoint_manager.test_ogg,targetshop_system.test_ogg;GGSCI(slavedbDBLOGINasogg)16>addreplicatrepa,extrail/ogg/dirdat/da,checkpointtabletestdb_repl.checkpointREPLICAT添加。下图是实际操作然后输入ggsci启动源抽取进程、投递进程和目标应用进程,然后手动向源数据库插入数据,查看目标数据库是否同步完成startextastartdmpastartrepa6.总结同步数据结构改变的方法目前还没有找到在不影响现有同步过程的情况下修改源数据结构的方法。源数据表和目标数据表结构不一致会导致源抽取过程中断,需要先处理源端和目标端的数据结构一致,再重新启动抽取过程(如果字段类型的修改可以自动转换,则不会失败,否则会失败)。如果目标DB表增加或减少字段不会影响同步重启:使用stop+进程名停止服务,如果不能停止,使用delete+进程名直接删除,然后重新配置进程并启动指定同步列:如果我们只想同步一个表中的某些字段,可以指定我们需要同步的列,如下图修改提取流程exta(但从测试结果来看,并不能解决问题后面在源表中添加字段不影响同步)多表同步:直接在涉及配置表的行下新增一行配置需要同步的表与原表+数据库相同。桌子