MySQL:支持的数据类型、对象和操作
本节包含 MySQL Database 上 Oracle GoldenGate 的支持信息。
除非本文档另有说明,否则 Oracle GoldenGate for MySQL 支持对源数据进行映射、筛选和转换,以及将来自 Oracle GoldenGate 支持的其他源数据库的数据复制到 MySQL 数据库。
Oracle GoldenGate for MySQL 支持的数据类型
Oracle GoldenGate for MySQL 支持以下数据类型:
-
BLOB -
BIGINT -
BINARY -
BIT(M) -
CHAR -
DATE -
DATETIME -
DECIMAL -
DOUBLE -
ENUM -
FLOAT -
INT -
JSON -
LONGBLOB -
LONGTEXT -
MEDIUMBLOB -
MEDIUMINT -
MEDIUMTEXT -
SMALLINT -
TEXT -
TIME -
TIMESTAMP -
TINYBLOB -
TINYINT -
TINYTEXT -
VARBINARY -
VARCHAR -
VECTOR -
YEAR
限制和澄清
在运行 Oracle GoldenGate for MySQL 时,请注意以下事项:
-
Capture 或 Delivery 不支持功能索引。
-
当用作主键时,Oracle GoldenGate 不支持
BLOB或TEXT类型。 -
Oracle GoldenGate 支持从 00:00:00 到 23:59:59 的
TIME类型范围。 -
Oracle GoldenGate 支持从
0001/01/03:00:00:00到9999/12/31:23:59:59的时间戳数据。如果时间戳从 GMT 转换为本地时间,则这些限制也适用于生成的时间戳。根据时区,转换可能会增加或减去小时数,这可能会导致时间戳超过支持的下限或上限。 -
Oracle GoldenGate 不支持负日期。
-
浮点数对范围和精度的支持取决于主机。一般来说,精度精确到 16 位有效数字,但应查看数据库文档以确定预期的近似值。Oracle GoldenGate 舍入或截断超过支持精度的值。
-
在非严格
sql_mode中使用ENUM类型时,非严格sql_mode不会阻止您输入无效的ENUM值,并且将返回错误。要避免这种情况,请执行以下操作之一:-
使用
sql_mode作为STRICT并重新启动提取。这样可防止用户为任何数据类型输入无效值。IE 用户只能为这些数据类型输入有效值。 -
继续使用非严格
sql_mode,但不要使用ENUM数据类型。 -
继续使用非严格
sql_mode并使用数据库中具有有效值的ENUM数据类型。如果指定无效值,数据库将默默接受这些值,提取将异常终止。
-
-
JSON 数据类型不支持具有单个列的表。如果为单个列的数据类型为
JSON,则提取将异常终止。 -
JSON数据类型不支持 CDR。如果配置了GETBEFORECOLS并且表具有JSON数据类型的列,则以下消息会记录在报表文件中:INFO OGG-06556 The following columns will not be considered for CDRCDR 的限制适用于使用
GETBEFORECOLS和COMPARECOLS的情况。 -
MySQL 提取不会异常终止并处理表定义中未定义为 'invalid_enum' 的
ENUM列值。
不支持的 MySQL 数据类型
Oracle GoldenGate for MySQL 不支持以下数据类型:
所有空间类型(GEOMETRY 等)和 SET。
MySQL 中不支持以下所有 GEOMETRY 类型:
-
点
-
LINESTRING
-
多边线
-
多点
-
多线程
-
多边形
-
GEOMCOLLECTION 注:如果提取配置为从包含任何不受支持的数据类型的表中捕获,则提取将异常终止,因此请确保提取未配置为从包含不受支持数据类型的列的表中捕获。
MySQL 支持的对象和操作
Oracle GoldenGate for MySQL 支持以下对象和操作:
-
Oracle GoldenGate 支持对源和目标数据库事务处理表执行以下 DML 操作:
-
插入操作
-
更新操作(包括压缩)
-
删除操作(包括压缩)
-
截断操作
-
-
Oracle GoldenGate 支持提取和复制 DDL(数据定义语言)操作。
-
Oracle GoldenGate 支持事务处理表,最多支持 MySQL 和正在使用的数据库存储引擎支持的完整行大小和最大列数。InnoDB 最多支持 1017 列。
-
Oracle GoldenGate 支持提取生成的列。
-
不允许复制到 MySQL 生成的列,因此需要将任何源生成的列数据映射到非生成列。
-
Oracle GoldenGate 支持
AUTO_INCREMENT列属性。增量值通过提取从二进制日志中捕获,并应用于复制插入操作中的目标表。 -
Oracle GoldenGate 可与 MySQL 本机复制同时运行。
-
Oracle GoldenGate 支持 MySQL 的
DYNSQL功能。
注:捕获不支持 XA 事务处理,登录到 binlog 的任何 XA 事务处理都会导致提取异常终止。因此,不能对提取配置为捕获的数据库使用 XA 事务处理。如果 XA 事务处理用于未配置用于 Oracle GoldenGate 捕获的数据库,则使用 MySQL 服务器配置文件中的参数 binlog-ignore-db 排除这些数据库登录到 MySQL 二进制日志。
自动心跳表支持的限制如下:
-
确保要创建心跳表的数据库已存在,以避免在添加心跳表时发生错误。
-
在心跳历史记录滞后视图中,系统时间方面会显示
heartbeat_received_ts、incoming_heartbeat_age和outgoing_heartbeat_age等字段中的信息。您应确保使用正确和当前时区信息设置操作系统时间。 -
MySQL 中支持按文件结束位置 (EOF)。对于 MySQL,Oracle GoldenGate Extract 将查找与该文件末尾对应的位置,并从此处开始读取事务处理。如果数据连续写入二进制日志,则 EOF 位置不准确。
将使用以下项添加和更改提取:
ADD EXTRACT *group_name*, TRANLOG, EOFALTER EXTRACT *group_name*, EOF
MySQL DDL 中对对象和操作的支持详细信息
下面列出了 Oracle GoldenGate 支持的用于捕获和复制 DDL 操作的 MySQL 对象和操作类型。
-
MySQL 的 DDL 复制仅在作为源和目标的 MySQL 数据库之间受支持。
-
MySQL 8.0 及更高版本支持 DDL 操作的提取和复制。支持的 DDL 操作包括:
-
CREATE TABLE(不包括CREATE TABLE AS SELECT) -
DROP TABLE -
TRUNCATE TABLE(支持使用GETTRUNCATES) -
ALTER TABLE TRUNCATE PARTITION -
ALTER TABLE ADD COLUMN -
ALTER TABLE ADD COLUMN AFTER -
ALTER TABLE DROP COLUMN -
ALTER TABLE MODIFY COLUMN(COLUMN_NAME,TYPE,SIZE) -
ALTER TABLE ADD (constraints) PRIMARY KEY -
ALTER TABLE DROP PRIMARY KEY
-
-
对于 MySQL 8.0,支持本地和远程 DDL 捕获。
-
TRUNCATE操作通过GETTRUNCATESExtract and Replicat 参数作为 DML 支持,不需要为 MySQL DDL 支持配置 Oracle GoldenGate。 -
Oracle GoldenGate 双向配置不支持 DDL 复制。
-
对于无法将
binlog_row_metadata数据库设置设置为FULL的基于云的数据库服务,不支持 DDL 复制。
MySQL 的不受支持对象和操作
Oracle GoldenGate for MySQL 不支持以下对象和操作:
-
隐形列
-
用于复制的 Oracle GoldenGate
BATCHSQL功能。 -
不支持以下字符集:
-
ULIB_CS_ARMSCII8,/* 美国国民 166-9 */
-
ULIB_CS_GEOSTD8,/* 地理标准 */
-
ULIB_CS_KEYBCS2, /* Kemennicky MS-DOS
-
-
启用 DDL 时,不支持使用
FETCHMOCOLS和FETCHMODCOLEXCEPTTABLE 选项捕获 NLS LOB 数据。 -
重命名表
-
存储过程中的 DDL 语句不受支持。
-
如果 Oracle GoldenGate 安装服务器的时区与源数据库服务器的时区不匹配,则发送到目标数据库的 TIMESTAMP 数据将与源数据库不同。对于 Oracle GoldenGate Microservices 安装,无论时区是否相同,Extract 将将时区解析为 UTC。通过运行以下查询确定源数据库时区:
select @@system_time_zone;这将返回时区值,例如 PDT。
在部署中创建一个包含源提取(称为
TZ)的变量,并将其设置为源数据库时区的值。在此之后,停止任何正在运行的 Oracle GoldenGate 进程并重新启动管理服务,然后启动提取和复制。 -
不支持从视图和视图进行提取和复制。
-
从属服务器应用的事务处理将记录到中继日志中,而不是从属服务器的
binlog中。如果希望从属服务器写入从主服务器接收的binlog事务处理,则需要在my.cnf中使用日志从属服务器更新选项 1 启动复制从属服务器。这是其他二进制日志记录参数的补充。在主服务器的事务位于从属服务器的binlog中之后,您可以在从属服务器上设置常规捕获以捕获和处理从属服务器的binlog。
SingleStoreDB 对象和操作的限制
Oracle GoldenGate for MySQL 现在支持 SingleStoreDB 和 SingleStoreDB 云,但存在以下限制:
-
不支持复制到 SingleStoreDB 中的视图,因为只有基表是可写入的。
-
不支持对属于
SHARD密钥的列进行更新。 -
不支持对没有显式
SHARD键的表进行主键更新。这是因为在这种情况下,SingleStoreDB 将主键指定为SHARD密钥,并且不允许更新SHARD密钥列。 -
不支持对没有主键或唯一键且分布在多个分区中的 SingleStoreDB 表执行 Replicat 的
DBOPTIONS LIMITROWS行为。 -
SingleStoreDB 不支持
DBOPTIONS LIMITROWS和NOLIMITROWS参数选项。 -
SingleStoreDB 不支持跨数据库事务处理,这意味着复制只能支持到单个方案/数据库的映射。这包括检查点和心跳表的映射,因此这些对象必须与要复制的用户表在相同的方案/数据库下创建。
系统方案
除非在没有通配符的情况下显式指定以下方案或对象,否则 Oracle GoldenGate 不会自动复制它们。
-
MySQL
-
'information_schema' -
'performance_schema' -
'mysql' -
'sys'
-
-
SingleStore
-
'information_schema' -
'cluster' -
'memsql'
-