数据库
首页 > 数据库> > 5分钟搞定 SQL Server 到 MySQL 数据迁移和同步

5分钟搞定 SQL Server 到 MySQL 数据迁移和同步

作者:互联网

简述

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,数据库,系统,代理
来源: