精华内容
下载资源
问答
  • 数据库同步
    2022-01-19 10:26:19

    达梦数据库同步部署方案

    一、部署方案简述

    ​ 达梦数据复制(DATA REPLICATION)是一个分担系统访问压力、加快异地访问响应速度、提高数据可靠性的解决方案。将一个服务器实例上的数据变更复制到另外的服务器实例。可以用于解决大、中型应用中出现的因来自不同地域、不同部门、不同类型的数据访问请求导致数据库服务器超负荷运行、网络阻塞、远程用户的数据响应迟缓的问题。

    ​ 服务部署采用分级部署,各地采用独立数据库,各所与局之间进行部分数据同步。

    二、部署中涉及到的重要概念

    1. 主服务器

    发起复制操作的服务器,称为主服务器。

    2. 从服务器

    接收主服务器发送的数据并进行复制的服务器,称为从服务器。

    3. 复制服务器(RPS)

    在数据复制环境中,负责配置复制环境,定义复制关系的服务器。 RPS 有且仅有一台,它只负责配置和监控,并不参与到复制过程中。

    三、部署方案

    配置数据复制在 RPS (复制服务器)上进行。在配置数据复制之前,需要保证复制服务器和所有待配置节点的实例名各不相同,配置好其 MAL 系统并保证网络环境正常。按照复制组、复制关系、复制表映射的顺序配置复制环境。

    1. 准备工作

    首先准备一台复制数据库,三台需要数据同步的数据库(一个局级数据库,两个所级数据库,这个数据库的数量按照实际需求来)。这里默认所有的数据库已经安装完毕。

    参与复制的数据库信息如下:

    服务器实例名IP 地址数据库端口号MAL 端口号
    复制服务器(数据库)JD_SERVER_212192.168.7.21252405241
    局服务器(数据库)JD_SERVER_250192.168.7.25052405242
    所服务器一(数据库)JD_SERVER_211192.168.7.21152405243
    所服务器二(数据库)JD_SERVER_213192.168.7.21352405244

    2. 修改dm.ini配置文件

    修改对应数据库实例的dm.ini配置文件如下:

    数据库dm.ini 设置
    复制服务器(数据库)INSTANCE_NAME = JD_SERVER_212 PORT_NUM = 5240 MAL_INI = 1
    局服务器(数据库)INSTANCE_NAME = JD_SERVER_250 PORT_NUM = 5240 MAL_INI = 1
    所服务器一(数据库)INSTANCE_NAME = JD_SERVER_211 PORT_NUM = 5240 MAL_INI = 1
    所服务器二(数据库)INSTANCE_NAME = JD_SERVER_213 PORT_NUM = 5240 MAL_INI = 1

    参数解释:

    MAL_INI = 1 #打开MAL系统

    注意,复制服务器所在数据库不能参与复制,应该是一个单独的数据库或者数据库实例。

    3. 修改dmmal.ini 配置文件

    MAL_CHECK_INTERVAL = 2
    MAL_CONN_FAIL_INTERVAL = 5
    [MAL_INST1]
    MAL_INST_NAME = JD_SERVER_212                              
    MAL_HOST = 192.168.7.212
    MAL_PORT = 5241
    MAL_INST_PORT = 5240
    MAL_INST_HOST = 192.168.7.212
    [MAL_INST2]
    MAL_INST_NAME = JD_SERVER_250
    MAL_HOST = 192.168.7.250
    MAL_PORT = 5242
    MAL_INST_PORT = 5240
    MAL_INST_HOST = 192.168.7.250
    [MAL_INST3]
    MAL_INST_NAME = JD_SERVER_211
    MAL_HOST = 192.168.7.211
    MAL_PORT = 5243
    MAL_INST_PORT = 5240
    MAL_INST_HOST = 192.168.7.211
    [MAL_INST4]
    MAL_INST_NAME = JD_SERVER_213
    MAL_HOST = 192.168.7.213
    MAL_PORT = 5244
    MAL_INST_PORT = 5240
    MAL_INST_HOST = 192.168.7.213
    
    

    每个节点的 dmmal.ini 配置必须一致,一个节点配置好后可直接拷贝到另外两个节点。

    参数解释:

    参数解释
    MAL_CHECK_INTERVALMAL 链路检测时间间隔
    MAL_CONN_FAIL_INTERVAL判定 MAL 链路断开的时间
    MAL_INST_NAME实例名,和 dm.ini 中的 INSTANCE_NAME 一致
    MAL_HOSTMAL系统监听TCP连接的IP地址,即为当前机器的IP
    MAL_PORTMAL系统监听TCP连接的端口,每个实例必须不一样
    MAL_INST_HOST实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
    MAL_INST_PORT实例对应的守护进程监听 TCP 连接的端口

    4. 复制服务器初始化

    ​ 通过执行系统函数SP_INIT_REP_SYS(create_flag)来初始化复制服务器。其主要作用是创建复制用户(SYSREP/SYSREP)和创建复制服务器上需要的系统表。SP_INIT_REP_SYS 的参数create_flag 为 1 时表示创建用户和系统表,为 0 时表示删除用户和系统表。

    执行示例

    SP_INIT_REP_SYS(1);
    

    5.环境初始化

    以上工作完成后,即可进行复制环境的配置了。

    1. 重新启动以上所有数据库,启动的顺序不分先后。

    2. 登录复制服务器数据库,保证服务器状态为 OPEN,开始复制配置。

    3. 创建复制组: REP_GRP_JD ,执行如下语句:

    SP_RPS_ADD_GROUP('REP_GRP_JD', '主从同步复制');
    

    6.在数据同步服务中执行初始化

    部署数据同步服务,比如服务所在ip为30.29.5,那么可以调用如下接口执行初始化配置关系:

    post 30.29.5:8090/strategy/init?defalutIp=192.168.7.250&defalutPort=5240

    defaultIp指局数据库ip,defalutPort为对应的数据库实例端口

    至此,数据库同步服务部署完成。

    更多相关内容
  • 从本文开始,我将介绍一个数据库同步系统的设计方案,该系统是我在2010年给某软件公司做设计模式内训时指导几位开发人员所开发的一个项目,系统以某省级移动公司应急管理系统数据备份(数据库同步)需求为原型,基本...
  • 易语言数据库同步

    2020-07-20 14:57:02
    易语言数据库同步源码,数据库同步,配置初始化读取,子程序1,远程读取数据库并插入当前表,配置文件式,数据库式,检测未填写,读取当前任务信息
  • 关系型数据库同步工具,使用 JavaFX 开发,功能包括完成关系型数据库表结构获取、多种类型数据库之间数据转移、同步。 目前支持的数据库类型有mysql、Oracle、sqlserver、PostgreSql、sqlite、h2、access、达梦等。
  • 将数据从一个Postgres数据库同步到另一个数据库(例如pg_dump / pg_restore )。 设计用于: 速度-表格并行传输 安全性-防止敏感数据离开服务器的内置方法 灵活性-优雅地处理架构差异,例如缺少列和多余的列 便利...
  • DB Comparer for Oracle是一款卓越的Oracle数据库比较和同步工具,使你可以查看被比较的数据对象之间所有的差别并执行自定产生的脚本同步数据库结构和排除所有或选择的区别。可以能够自动对Oracle数据库模型比较和...
  • 数据库数据同步工具”是一套适合数据库数据管理者和软件开发者的工具软件,从用户的需要出发,为用户需要而设计。软件界面友好,操作简便,能够使用户非常有效和方便的对数据库数据进行管理。 软件主要功能是支持...
  • 本文档主要介绍了Oracle数据库同步解决方案
  • SyncNavigator是一款功能强大的数据库同步软件,适用于SQL SERVER, MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windows xp以上所有操作系统,适用...
  • 开源免费数据库同步工具SQL-DBDiff_V0.4 可用于两个数据库之间的比较,也可以做同步迁移用 全英文界面,配置选项比较多,适合英文还可以的朋友使用
  • SyncNavigator数据库同步软件是一款 SQLSERVER,MYSQL 数据库同步软件。它为您提供一种简单智能的方式完成复杂的数据库数据同步,分发操作。 SyncNavigator 可以帮助您快速的完成数据库的数据同步。不需要专业的...
  • 基于web和service层面的异构数据库之间的同步设计,实现数据同步
  • 需要支持离线功能,所以本地需要一份数据库的拷贝,这样涉及到移动端和服务器端数据库同步问题。  在设计时我要满足以下几个需求:  1. 同步时双向传输数据小化。双向即,服务器端更新同步到移动端,和移动端...
  • 易语言源码数据库同步易语言源码.rar 易语言源码数据库同步易语言源码.rar 易语言源码数据库同步易语言源码.rar 易语言源码数据库同步易语言源码.rar 易语言源码数据库同步易语言源码.rar 易语言源码数据库同步...
  • 如何针对不同的应用选择不同的产品,需要我们必须清楚数据库同步和数据库复制的具体含义。  无论概念如何定义,我们都必须清楚,这两种操作的基础是数据库中的数据,但是包含的数据内容却有所不同  数据库同步,...
  • SQLite数据库同步指南

    2016-02-27 17:48:35
    SQLite DBSync是开源嵌入式数据库SQLite的数据同步引擎,实现了SQLite与SQLite数据库之间以及SQLite与异构数据库Oracle、MySQL、SQLServer之间的增量的、双向的数据同步功能。在文章中对SQLite DBSync 的体系结构、...
  • VB操作ACCESS数据库实例,通过按键刷新,将Access数据库A中的全部数据或部分列数据同步到Access数据库B中。内含实际项目内容及数据库
  • 在选择数据库同步备份解决方案时,我们评估了两种方式:SQL Server 2008的数据库镜像和SQL Server 2008数据库复制。数据库镜像的优点是系统能自动发现主服务器故障,并且自动切换至镜像服务器。但缺点是配置复杂,...
  • 对在分布式环境下的Oracle数据库实现数据同步时,涉及的几个主要问题进行探讨,通过日志分析方法,分析了日志文件的归档,采用LogMiner对Oracle归档日志进行解析,解析和重构归档日志中的SQL语句等问题。设计了一个分布式...
  • 同步当前数据库和服务器数据库的数据,使得两个数据库的数据一致,这个属于sql的高级应用,相信对你们都很有用处,也可以对你们的数据库能用有所提示,是一篇比较好的资料,由于该资料是本人开发的,所以希望尊重...
  • e融合异构数据库同步系统是一款非常实用的全新系统应用服务平台,不同数据库之间数据表同步系统,这款软件能够帮助用户根据时间字段和数据值是否存在差异来判断源数据表的数据更新情况,安全稳定可用免费使用,感...
  • WinCC_SQL_SERVER_数据库实现数据库同步
  • Python数据库同步神器(一键同步)

    千次阅读 2022-01-16 21:53:33
    公司有3套测试环境,来回切换并校验数据比较麻烦,于是就有了如下的数据库同步神器出现了。 ps:鄙人代码写的比较烂,还望各位大神多指点 2.界面: 3.源代码: # -*- coding: utf-8 -*- """ @date: ...

    1.背景:

    最近公司项目的用户中心模块经常出现线上问题,测试人员需要将线上真实数据导入到测试环境中去复现Bug。公司有3套测试环境,来回切换并校验数据比较麻烦,于是就有了如下的数据库同步神器。

    2.界面:

    3.源代码:

    # -*- coding: utf-8 -*-
    """
    @date:  2022/01/16 22:00
    @author: Anker
    @python:v3.6
    """
    import json
    import tkinter as tk
    import tkinter.filedialog
    import tkinter.messagebox
    import pymysql as pymysql
    from tkinter import END
    from pymysql.cursors import DictCursor
    
    # 线上数据库
    online_connect = "erdshggadkjhg2wrtyuic.sfgh.aliyuncs.com"
    online_user = "Anker"
    online_password = "123456"
    online_port = "3306"
    online_db_name = "user_center"
    online_table = "uuc_business_user"
    
    # 测试数据库
    test_connect = "bm-cp134dfhdh5e7uho.mysql.rds.aliyuncs.com"
    test_user = "root"
    test_port = "3306"
    test_password = "Vr9ybte9hQJMghjkljh"
    test_table = "uuc_business_user"
    
    # 创建一个窗口
    window = tk.Tk()
    window.title("数据库同步工具")
    window.geometry('600x600')
    
    # 将new_user_data变量初始化
    new_user_data = None
    
    
    def data_synchronization():
        # 定义一个全局变量new_user_data
        global new_user_data
        # 每次触发操作之前,清空多行文本框的内容
        text.delete("1.0", "end")
        # 定义两个变量name和phone,用来获取用户在文本框输入的内容
        name = entry1.get()
        phone = entry2.get()
        # 连接线上数据库数据库
        conn_online_sql = pymysql.connect(host=online_connect, user=online_user, cursorclass=DictCursor,
                                          password=online_password, database=online_db_name)
        curs_online = conn_online_sql.cursor()
        # 通过字典去读取不同的测试环境
        db_config = radio.get()
        config = {"0": "0", "test1环境": "user_center_ding", "test2环境": "user_center_ding_test2", "test3环境": "test3"}
        test_db_name = config[db_config]
    
        try:
            if not (entry1.get() and entry2.get()):
                tk.messagebox.showinfo(title="提示", message="用户姓名、用户手机为必填项!")
            elif radio.get() == "0":
                tk.messagebox.showinfo(title="提示", message="请选择数据库")
            elif radio.get() == "test3环境":
                tk.messagebox.showinfo(title="提示", message="目前没有该测试数据库")
            else:
                # 连接测试数据库数据库"
                conn_test2_sql = pymysql.connect(host=test_connect, user=test_user, password=test_password,
                                                 database=test_db_name)
                curs2 = conn_test2_sql.cursor()
                # 读取线上数据库的用户信息
                read_online_sql = f'''select * from `{online_db_name}`.`{online_table}` 
                            where name = "{name}" and phone = "{phone}" '''
                # 读取测试数据库的用户信息
                read_test2_sql = f'''select * from `{test_db_name}`.`{test_table}` where name = 
                            "{name}" and phone = "{phone}" '''
                # 执行sql查询,查询线上数据库,将查询出来的结果保存在online_user_data中
                curs_online.execute(read_online_sql)
                online_user_data = curs_online.fetchone()
                print("线上数据库该用户数据为:" + '\n' + str(online_user_data) + '\n')
    
                # 判断线上数据库是否有该用户
                if not online_user_data:
                    text.insert("insert", "线上数据库没有该用户!" + '\n')
                else:
                    # 执行下面这句后data为{"content": "x", "created_time": "2019-06-19 13:28:30"},是str类型
                    data = json.dumps(online_user_data, default=str, ensure_ascii=False)
                    # 把data转换为字典类型
                    data_result = json.loads(data)
                    print("转换为dict类型后的数据为:", '\n', data_result, '\n')
                    # 把data再次转为json类型
                    json_result = json.dumps(data_result)
                    print("转换为json类型后的数据为:" + '\n' + json_result + '\n')
                    # 获取返回字典data_result值的所有value的列表
                    new_user_data = tuple(data_result.values())
                    print(new_user_data)
    
                # 执行sql查询,查询测试数据库,将查询出来的结果保存在test_user_data中
                curs2.execute(read_test2_sql)
                test2_user_data = curs2.fetchone()
                # 提交数据至线上数据库
                conn_online_sql.commit()
                # 判断测试数据库是否有该用户
                if test2_user_data:
                    text.insert("insert", "测试数据库已存在该用户数据!" + '\n')
                # 如果线上数据库有该用户,测试数据库没有该用户,则执行同步操作
                if online_user_data and (not test2_user_data):
                    try:
                        # 插入的SQL语句
                        insert_sql = f'''insert into `{test_db_name}`.`{test_table}` VALUES {new_user_data}'''
                        # 执行SQL,向测试数据库中插入数据
                        curs2.execute(insert_sql)
                        print(insert_sql)
                        text.insert("insert", "数据同步成功!" + '\n')
                    except IOError:
                        text.insert("insert", "数据同步失败!" + '\n')
                conn_test2_sql.commit()
                curs_online.close()
                curs2.close()
        except IOError:
            print("数据插入失败")
            conn_online_sql.rollback()
            tkinter.filedialog.Directory()
        conn_online_sql.close()
    
    
    # 清空按钮函数:用来清空输入文本框中的内容
    def clear():
        entry1.delete(0, END)  # 清空Entry文本框中的内容
        entry2.delete(0, END)  # 清空Entry文本框中的内容
        text.delete("1.0", "end")  # 清空text多行文本框中的内容
        radio.set("0")  # 清空Radiobutton标签选项框
    
    
    def selection():
        text.delete("1.0", "end")
        choose = str(radio.get())
        text.insert("insert", "您选择的是:" + choose + '\n')
    
    
    # 创建一个标签
    tk.Label(window, text="线上用户姓名:").place(x=10, y=50)
    tk.Label(window, text="线上用户手机:").place(x=10, y=120)
    # 创建一个Entry文本框:用来输入一行文本字符串
    entry1 = tk.Entry(window, bd=3, width=62, highlightcolor='red')
    entry1.place(x=120, y=50)
    entry2 = tk.Entry(window, bd=3, width=62, highlightcolor='green')
    entry2.place(x=120, y=120)
    # 创建一个可以输入多行文字的文本框
    text = tk.Text(window, height=20, width=75, bg='white', highlightcolor='blue', highlightthickness=1)
    text.place(x=35, y=240)
    # 创建两个按钮:选择文件夹、退出窗口
    tk.Button(window, text='开始同步', bg='grey', fg='white', command=data_synchronization).place(x=130, y=520)
    tk.Button(window, text='清空', bg='grey', fg='white', command=clear).place(x=290, y=520)
    tk.Button(window, text='退出', bg='grey', fg='white', command=window.quit).place(x=430, y=520)
    
    radio = tk.StringVar()
    radio.set("0")
    tk.Label(window, text='请选择数据库:', bg='green', fg='white', width=12).place(x=10, y=180)
    # 创建3个radiobutton选项
    radio1 = tk.Radiobutton(window, text='test1环境', variable=radio, command=selection, value="test1环境")
    radio1.place(x=140, y=180)
    radio2 = tk.Radiobutton(window, text='test2环境', variable=radio, command=selection, value="test2环境")
    radio2.place(x=290, y=180)
    radio3 = tk.Radiobutton(window, text='test3环境', variable=radio, command=selection, value="test3环境")
    radio3.place(x=440, y=180)
    
    # 主循环
    window.mainloop()
    

    展开全文
  • 全面阐述SqlServer数据库数据存储的方案 通过几种环境对比 根据项目的具体需求 选择适合自己的方案
  • 主要介绍了Django 数据库同步操作技巧详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • SQLServer2008R2主从数据库同步
  • 数据库同步有3大难题: 1是如何保障目标和源数据一致性; 2是异构数据库如何做数据类型转换,导致数据同步失败的原因常常是因为数据类型不一样; 3是在数据越实时越有价值的背景下,同步过程中能否做到实时同步。

    摘要

    数据库同步有3大难题:
    1是如何保障目标和源数据一致性;
    2是异构数据库如何做数据类型转换,导致数据同步失败的原因常常是因为数据类型不一样;
    3是在数据越实时越有价值的背景下,同步过程中能否做到实时同步。

    一、几种主流的数据库同步方式

    方式一:基于无侵入的日志模式(如Oracle redo、Mysql binlog)
    基于日志的采集方式无需在源库端部署任务代理程序(Agent)及建任何表,对源数据库无侵入和影响压力;

    方式二:基于时间戳
    同步过程通过特定属性(如时间戳、自增序列)来识别新插入的数据,该方式实现最简单,但无法记录删除和更新,也不具备实时的能力;

    方式三:基于触发器
    基于数据库的触发器机制,当执行DML相关语句时,执行动作来捕获数据,该方式会降低系统能,因此大多数场景下,生产系统不允许添加触发器。

    方式四:基于快照
    基于快照的方式,可以通过比较源表和快照表来获得数据变化,但需要消耗大量存储空间和计算资源。

    方式五:基于离线批处理
    通过jdbc查询来批量获取数据,会进行数据表的大范围扫描和数据提取,会对数据库产生大量开销。

    本文主要探讨无侵入的CDC模式,并以运用这种模式的数据库同步云工具 Tapdata Cloud 举例,你要问我为啥用它举例,原因只有一个:永久免费。

    二、架构及工作原理

    Tapdata Cloud包含两部分:

    1. Tapdata Cloud Manager,TCM是Tapdata Cloud的管理端,负责agent实例的安装,同步任务的配置、分发、任务状态监测。
    2. Tapdata agent,是Tapdata Cloud数据同步服务的执行实例,负责从TCM获取任务信息,通过流式技术从源系统获取数据、处理转换数据并发送到目标系统,并在任务执行过程中监测并上报任务状态至TCM。

    在这里插入图片描述

    (Tapdata Cloud 工作原理图)

    有朋友可能会担心这个云平台会不会把我要同步的数据泄露出去?

    从Tapdata Cloud 工作原理上可以看出:

    1. 同步实例节点单向连接管控端运行服务。 Tapdata agent实例节点对外不主动暴露网络信息,只会连接 TCM管理端服务,获取任务信息、上报状态信息。
    2. 用户部署的Tapdata agent实例节点和 TCM 通信链路采用 HTTPS 协议。
    3. 自建模式下,所有数据流转均发生在受用户管理的服务器和网络环境。
      可见,数据同步过程中数据泄露的问题大可不必担忧。

    三、全量同步和实时增量同步机制

    Tapdata Cloud 这款云同步工具支持全量同步和实时增量同步,实现的过程如下图所示:
    在这里插入图片描述


    四、源和目标

    据 Tapdata Cloud 最新版本,目前支持了:

    数据库版本作为源作为目标是否可用
    mysql5.x,8.x支持支持
    oracle9i, 10g, 11g, 12c支持支持
    sqlsever2005, 2008, 2012, 2014, 2016, 2017支持支持
    mongodb3.2, 3.4, 3.6, 4.0, 4.2支持支持
    PostgreSQL9.x, 10.x,11.x,12.x,13.x支持支持
    Elastic5.x, 6.x, 7.x暂不支持支持
    达梦数据库7,8支持支持
    Kafka2.3.x及以上暂不支持支持
    Redis2.x, 3.x, 4.x暂不支持支持即将上线
    DB29.7 LUW版本支持支持即将上线
    SybaseSybase ASE 15.7 及以上支持支持即将上线
    Gbase支持支持即将上线

    五、举例:Oracle 数据实时同步到 Elasticsearch

    一般需要做全文检索的时候,会将 Oracle 数据实时同步到 Elasticsearch。

    第一步:配置 Oracle 连接

    1. 点击 Tapdata Cloud 操作后台左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择Oracle
      在这里插入图片描述

    1. 在打开的连接信息配置页面依次输入需要的配置信息
      在这里插入图片描述

    【连 接 名 称】:设置连接的名称,多个连接的名称不能重复
    【数据库地址】:数据库 IP / Host
    【端 口】:数据库端口
    【数据库名称】:tapdata 数据库连接是以一个 db 为一个数据源。这里的 db 是指一个数据库实例中的 database,而不是一个 schema。
    【账 号】:可以访问数据库的账号
    【密 码】:数据库账号对应的密码
    【时 间 时 区】:默认使用该数据库的时区;若指定时区,则使用指定后的时区设置

    第二步:配置 Elasticsearch 连接

    1. 同第一步操作,点击左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择Elasticsearch
      在这里插入图片描述

    1. 在打开的连接信息配置页面依次输入需要的配置信息,配置完成后测试连接保存即可。
      在这里插入图片描述

    第三步:建立同步任务,以全量+增量同步举例
    进入Tapdata Cloud 操作后台任务管理页面,点击添加任务按钮进入任务设置流程
    在这里插入图片描述


    根据刚才建好的连接,选定源端与目标端。
    在这里插入图片描述


    根据数据需求,选择需要同步的库、表,如果你对表名有修改需要,可以通过页面中的表名批量修改功能对目标端的表名进行批量设置.
    在这里插入图片描述


    在以上选项设置完毕后,点击下方的全量+增量选项并点击确定按钮即可完成本次全量同步任务的配置,在点击确定后将自动返回任务管理页面,在任务管理页面中,点击右侧的启动按钮即可使Tapdata Agent 开始执行本次任务。在全量任务执行完毕后,Tapdata Agent 会自动进入增量同步状态。在该状态中,Tapdata Agent 会持续监听源端的数据变化(包括:写入、更新、删除),并实时的将这些数据变化写入目标端。

    在这里插入图片描述


    点击任务监控可以打开任务执行详情页面,可以查看任务执行的具体信息。
    在这里插入图片描述


    同理,其他数据库的同步操作也跟上面步骤一致,比如几个常用的场景是:
    • 从业务数据库到缓存数据库的实时同步
    • 不停机迁移数据库
    • 将主业务中心的数据实时同步至次业务中心
    • 构建只读实例
    • 构建异地灾备中心
    • 构建异地多活


    六、目标和源数据一致性

    很多人都担心同步的数据可能没法和源数据一致,Tapdata Cloud 提供了数据校验功能,包括快速count校验、表全字段值校验和关联字段值校验三种校验方式。
    • 快速count:仅对源表和目标表的行数进行count校验,速度极快,但是不会展示差异的具体字段内容。
    • 全表字段值校验:会对源表和目标表的全部字段进行逐行校验,能查出所有字段的差异,但是速度慢。
    • 关联字段值校验:只对源表和目标表的关联字段的值进行比对校验,速度快于全表字段值校验模式。
    校验操作步骤
    进入数据校验菜单,点击新建校验任务创建数据校验。
    【选择任务】:选择一个历史同步任务
    【校验类型】:可选 快速count校验、表全字段值校验和关联字段值校验
    【校验任务名】:默认与选择的同步任务名字一样
    【校验频次】:设置您的校验的执行频次
    【单次校验】:只执行一次校验
    【重复校验】:设置校验任务重复执行,支持设置校验执行的起止时间和校验间隔
    【错误数据保存条数】:当出现校验不一致的数据时,不一致数据保存的最大条数。该数值会影响到差异校验,当错误数据条数超出设置的保存条数时,将无法进行差异校验。
    【校验条件】:添加需要进行校验的表。点击自动添加会自动将任务下的所有表全部添加进来。

    快速count校验

    创建快速count校验时只需要选择到要校验的表,无需设置关联条件。
    在这里插入图片描述


    表全字段值校验

    除了要选择待校验表外,还需要针对每一个表设置索引字段。
    在这里插入图片描述


    在进行表全字段值校验时,还支持进行高级校验。通过高级校验可以添加JS校验逻辑,对源和目标的数据进行校验。

    在这里插入图片描述


    完整示例:以MongoDB查询示例

    JavaScript

    function validate(sourceRow){
        // 第1步
        var targetRow = target.executeQuery({database: "target",collection: "USER",filter: {USER_ID: sourceRow.USER_ID}});
        // 第2步
        if(sourceRow.USER_ID === targetRow[0].USER_ID){
            // 第3步
            return {result: 'passed',message: "",data: ""}
        }else{
            return {result: 'failed',message: "记录不一致",data: targetRow}
        }
    }
    

    在这里插入图片描述


    关联字段值校验

    创建关联字段值校验时,除了要选择待校验表外,还需要针对每一个表设置索引字段。
    在这里插入图片描述

    七、异构数据类型转换

    在异构数据库之间做同步,类型转换是一大难题,也是导致数据同步失败的重要原因,Tapdata Cloud 类型映射功能,在系统推演的基础上,提供了人工调整的能力,这一点比其他数据同步工具都更方便使用。
    在这里插入图片描述


    八、总结

    为了达到数据实时要求,并且不对源库造成干扰,首选 CDC 模式。
    现在市面上已经陆续出现了一些数据同步工具,完全没有必要自己撸代码了,免费的用起来不香吗?
    希望上文的实操图文,对你的数据库同步有帮助,有数据库相关的问题可以随时跟我交流!

    展开全文
  • sqlserver与mysql数据库同步,相关的配置,非常实用。
  • 数据库同步产品应用方案 博文链接:https://woxintech2011.iteye.com/blog/1488604

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 768,130
精华内容 307,252
关键字:

数据库同步