#数据同步

数据同步,又称主备复制,是指将主库/主集群上的数据实时同步到备库/备集群。

为统一称呼,主库在共享集群部署环境中代指主集群,备库代指备集群。

主备复制的实现过程是主库负责发送redo日志给备库,备库基于redo日志进行相应的处理与应用,从而实现备库和主库的在线同步。根据日志应用机制的不同,主备复制分物理复制和逻辑复制。

复制方式 功能说明 配置方式
物理复制 备库接收到redo日志后,直接回放redo日志更新备库的数据页面,使备库的数据更新到与主库完全一致,这种方式称为物理复制,其备库可引申称为物理备库。 高可用部署中,主备库之间物理复制完全自动化,无需手动配置。
逻辑复制 备库接收到redo日志后,将redo日志解析成SQL语句,再通过执行此类SQL语句使备库的数据与主库保持逻辑上一致,这种方式称为逻辑复制,其备库可引申称为逻辑备库。 完成主备部署后还需对备库进行类型转换(默认为物理备库,需转换为逻辑备库)、手动开启逻辑回放等操作,详情请查阅逻辑备库配置

逻辑复制相关功能适用于单机部署和共享集群部署,但在共享集群部署中仅用于滚动升级场景。

# 逻辑复制范围

通过逻辑复制可以进行数据同步的对象主要是主库中非SYS用户下列字段数据类型不存在JSON或UDT的HEAP表,不会同步的内容包括:

  • 主库SYS用户的所有业务

  • 审计策略

  • 权限与角色

  • PROFILE

  • 用户(支持同步DROP USER)

  • 表空间

  • 数据文件

  • 双写文件

  • OUTLINE

  • DATABASE LINK

  • AC

  • DIRECTORY

  • SEQUENCE的高水位线

  • LSC表、TAC表、外部表

# 逻辑备库运行要求

逻辑备库通常处于可读可写状态,如需在逻辑备库执行写业务,必须使用SYS用户。

成功部署及正常运行逻辑备库的要求如下:

  • 逻辑备库不允许级联部署。

  • 逻辑备库不能开启自选主。

  • 逻辑备库如需执行Failover,执行完成后,其他主备库全部需要重新BUILD。

存在逻辑备库时,对主库的操作存在如下约束:

  • 主库不能使用游标,否则逻辑备库可能会与主库的数据不一致。

  • 不允许主库进行主键列更新,否则逻辑备库可能会与主库的数据不一致。

  • 不允许主库执行表数据闪回,否则逻辑备库可能会与主库的数据不一致。

  • 不允许手动关闭主库的库级附加日志,否则会导致逻辑备库出现异常,无法正常同步。

  • 主库不能使用自增列(Mysql模式独有类型)、身份列。

  • 需确保主库中表的每一行能被唯一标识,建议在表中创建主键或唯一约束/索引。存在主键或唯一约束/索引时,UPDATE语句会在redo日志中记录必要的列值以唯一标识已修改的目标行,且唯一约束/索引有助于提高逻辑备库应用UPDATE语句时的效率,避免/减少全表扫描。

    • 当表定义了主键时,UPDATE语句的附加日志中会记录主键与已修改的列作为目标行的识别。

    • 若表未定义主键,则记录最短的非空唯一约束/索引与已修改的列作为目标行的识别。

    • 若主键、非空唯一约束/索引均未定义,则记录所有声明的最大长度=8000字节的列都将作为目标行的识别,此时逻辑备库可能无法正确维护以下数据类型的数据:

      • LOB类型

      • VARCHAR(Size > 8000字节)、NVARCHAR(Size > 8000字节)

      • RAW(Size > 8000字节)

    • 如果数据行不存在唯一性,逻辑备库可能无法正确维护相应的数据。

pdf-btn 下载文档 copy-btn 复制链接
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流