简述
SQL Server 是一个值得信赖的老牌数据库系统,自从 1988 年由 Microsoft、Sybase 和 Ashton-Tate 三家公司共同推出之后就一直不断迭代更新。而如今我们提到 SQL Server 通常是指 Microsoft 从 SQL Server 2000 之后的版本。至今 SQL Server 家族已经非常繁茂涵盖了 云上(Azure SQL Server)、IoT 设备(边缘 SQL Server)、以及经典版本(本地 SQL Server)。
实现 SQL Server 作为源端的实时数据同步,一般都会用到它的 CDC 功能,这个功能是从 2008 版本才开始支持。因此本文主要也是基于 SQL Server 2008 版本介绍如何使用 CloudCanal 快速构建一条稳定高效运行的 SQL Server 到 MySQL 数据同步链路。
技术点
基于 SQL Server 的 CDC
SQL Server 将用户的每一个数据操作都记录在后缀为 ldf 日志文件中。这些日志会保存在 ldf 文件中。当数据库启用 CDC 能力后,SQL Server 代理上会生成一个专门分析ldf文件的作业,再将具体的表启用 CDC, 则该作业开始持续分析文件中的变更事件到指定的表中。
作业执行用到 SQL Server 代理,该组件如果处于非启动状态,则生成任何可消费的变更数据。通常,我们可以在 Windows 对象资源管理器中查看是否已经开启了 SQL Server 代理。
由于 SQL Server 执行作业时无法设置起始位置,因此对于一个表的变更记录我们最早只能追溯到表启用 CDC 的那个时间点。具体的起始位点可以在 “cdc.change_tables” 表中查询得到。
还需要注意的另外一个细节是 CDC 表也是一张普通的表它和用户共享同一个数据空间。为了防止 CDC 表数据无限膨胀 SQL Server 会每天定时执行清理作业,清理过期的数据(具体时间视数据库配置而定)。
SQL Server -> MySQL 的数据类型支持
CloudCanal 从 2021 年开始支持 SQL Server 同步后就不断地丰富它的对端数据源,支持 SQL Server 到 MySQL 是一个非常重要的同步链路。
目前 CloudCanal 已经可以支持的类型和映射关系如下:
SQL Server 类型 | MySQL 类型 | 备注 |
---|---|---|
BIT | BIT | |
DECIMAL | DECIMAL | |
NUMERIC | DECIMAL | |
SMALLINT | SMALLINT | |
TINYINT | TINYINT | 映射为 tinyint unsigned� |
INT | INT | |
BIGINT | BIGINT | |
SMALLMONEY | FLOAT | |
MONEY | FLOAT | |
FLOAT | FLOAT | |
REAL | DOUBLE | |
DATE | DATE | |
DATETIMEOFFSET | DATETIME | 由于 MySQL 类型限制,会丢弃时区信息同时最多保留 6 位精度 |
DATETIME2 | DATETIME | 由于 MySQL 类型限制,会保留最多 6 位精度 |
SMALLDATETIME | DATETIME | |
DATETIME | DATETIME | 由于 MySQL 类型限制,会保留最多 6 位精度 |
TIME | TIME | 由于 MySQL 类型限制,会保留最多 6 位精度 |
CHAR | CHAR | � |
VARCHAR | VARCHAR | 源端 SQL Server 如果为 VARCHAR(MAX),则按照 TEXT 来处理 |
TEXT | TEXT | |
NCHAR | CHAR | |
NVARCHAR | VARCHAR | 源端 SQL Server 如果为 NVARCHAR(MAX),则按照 NTEXT� 来处理 |
NTEXT | TEXT | |
BINARY | BINARY | |
VARBINARY | VARBINARY | 源端 SQL Server 如果为 VARBINARY(MAX),则按照 IMAGE� 来处理 |
IMAGE | BLOB | |
TIMESTAMP | BIGINT | 会映射为 bigint unsigned |
ROWVERSION | BIGINT | 会映射为 bigint unsigned |
HIERARCHYID | -- | 暂不支持 |
UNIQUEIDENTIFIER | VARCHAR(36) | |
SQL_VARIANT | -- | 暂不支持 |
XML | TEXT | |
GEOMETRY | -- | 暂不支持 |
GEOGRAPHY | -- | 暂不支持 |
SYSNAME | VARCHAR(128) |
标签:SQL,server,MySQL,数据库,系统,代理 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。