#数据同步
数据同步,又称主备复制,是指将主库/主集群上的数据实时同步到备库/备集群。
为统一称呼,主库在共享集群部署环境中代指主集群,备库代指备集群。
主备复制的实现过程是主库负责发送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字节)
如果数据行不存在唯一性,逻辑备库可能无法正确维护相应的数据。

