记一次MySQL数据迁移到SQLServer全过程

为什么要做迁移?

由于系统版本、数据库的升级,导致测试流程阻塞,为了保证数据及系统版本的一致性,我又迫切需要想用这套环境做性能测试,所以和领导、开发请示,得到批准后,便有了这次学习的机会,所以特此来记录下整个过程。

使用方案:

借助工具与编码相结合形式,备份MySQL数据库,并把备份数据库还原到本地MySQL数据库,使用第三方工具完成数据迁移,代码实现SQL条数统计按照库名和表名回写结果,使用ultracompare实现比对。

使用工具:

第一种迁移工具

Microsoft SQL Server Migration Assistant for MySQL:推荐这款工具,微软出的,但是也会有些问题,如部分表数据不能完全迁移

第二种迁移工具

Navicat Premium 12:不推荐,速度慢,极容易失败

第三种迁移工具

Tapdata:这款也不错,第三方工具,但不稳定,总内存溢出,底层Java写的,需要与客服沟通解决使用中问题,客服响应速度不是很理想

比对工具

ultracompare:比对结果使用

工具使用

第一种迁移工具使用

Microsoft SQL Server Migration Assistant for MySQL,这款工具是微软出的,真的很好用,而且速度也算比较快。

https://www.microsoft.com/en-us/download/details.aspx?id=54257,下载安装.

下面来介绍如何使用这款工具,具体步骤如下:

第一步:创建一个迁移工程

需要注意的是你需要选择迁移到的SQL Server数据库的版本,目前支持:SQL Azure,SQL Server 2005,SQL Server2008,SQL Server 2012,SQL Server2014,根据实际需要选择你要迁移到目标数据库的版本。

第二步:连接源数据库和目标数据库

上面的是源:MySQL,下面的是目标:SQL Server

第三步:选择需要迁移的数据库创建迁移分析报告

此报告会分析当前需要迁移的数据库中的所有表结构并会生成一个可行性报告

生成的报告如下:

分析需要转换的对象,表,数据库有多少个,是否存在不可转换的对象等信息,如有检查错误会下下面输出

第四步: 转换schema 也就是数据库结构

迁移分两步:1.转换数据库结构,2.迁移数据;

第五步:在源数据库转换完schema之后记得在目标数据库上执行同步schema操作

否则转换的数据库结构是不会到目标数据库的

点击同步之后同样会有一个同步的报告:

点击OK之后就真正执行同步操作会将你转换完的结构同步到目标数据库上,创建对应的表及其他对象。同步操作完成之后会有如下输出:

第六步:结构同步完成之后接下来就是数据迁移操作了

我们可以看到右边有几个tab页,当前选中的是Type Map,会列出源数据库和目标数据库的字段类型的mapping关系

因为不同数据库之间的数据类型还是有所差异的。

点击Migrate Data之后需要再次确认输入源数据库密码和目标数据库密码,然后开始真正的数据的迁移。

执行之后就等待完成就好,同样会生成一个数据迁移完成的报告。至此数据迁移就可以完成了。

第二种迁移工具使用

Navicat Premium 12这款工具操作更简单,因为很多步骤可以图形化,相对简便。

具体操作步骤如下:

建立MySQL、SqlServer连接,

双击MySQL的连接,建立连接

然后选择navicat 的左上角工具

数据将自动导入

**注意:**该工具将不会同步约束,比如:默认值之类的。但是非空约束是可以传递到SqlServer

第三种迁移工具

Tapdata,这个工具是永久免费的,也算比较好用,具体使用方法如下:

第一步:配置MySQL 连接

1、点击 Tapdata Cloud 操作后台左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择MySQL

2、在打开的连接信息配置页面依次输入需要的配置信息

【连 接 名 称】:设置连接的名称,多个连接的名称不能重复

【数据库地址】:数据库 IP / Host

【端 口】:数据库端口

【数据库名称】:tapdata 数据库连接是以一个 db 为一个数据源。这里的 db 是指一个数据库实例中的 database,而不是一个 mysql 实例。

【账 号】:可以访问数据库的账号

【密 码】:数据库账号对应的密码

【时 间 时 区】:默认使用该数据库的时区;若指定时区,则使用指定后的时区设置

第二步:配置 SQL Server 连接

3、同第一步操作,点击左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择 SQL Server

4、在打开的连接信息配置页面依次输入需要的配置信息,配置完成后测试连接保存即可。

第三步:选择同步模式-全量/增量/全+增

进入Tapdata Cloud 操作后台任务管理页面,点击添加任务按钮进入任务设置流程

根据刚才建好的连接,选定源端与目标端。

根据数据需求,选择需要同步的库、表,如果你对表名有修改需要,可以通过页面中的表名批量修改功能对目标端的表名进行批量设置。

在以上选项设置完毕后,下一步选择同步类型,平台提供全量同步、增量同步、全量+增量同步,设定写入模式和读取数量。

如果选择的是全量+增量同步,在全量任务执行完毕后,Tapdata Agent 会自动进入增量同步状态。在该状态中,Tapdata Agent 会持续监听源端的数据变化(包括:写入、更新、删除),并实时的将这些数据变化写入目标端。

点击任务名称可以打开任务详情页面,可以查看任务详细信息。

点击任务监控可以打开任务执行详情页面,可以查看任务进度/里程碑等的具体信息。

第四步:进行数据校验

一般同步完成后,我都习惯性进行一下数据校验,防止踩坑。

Tapdata 有三种校验模式,我常用最快的快速count校验 ,只需要选择到要校验的表,不用设置其他复杂的参数和条件,简单方便。

如果觉得不够用,也可以选择表全字段值校验 ,这个除了要选择待校验表外,还需要针对每一个表设置索引字段。

在进行表全字段值校验时,还支持进行高级校验。通过高级校验可以添加JS校验逻辑,可以对源和目标的数据进行校验。

还有一个校验方式关联字段值校验 ,创建关联字段值校验时,除了要选择待校验表外,还需要针对每一个表设置索引字段。

以上就是 MySQL数据实时同步到 SQL Server 的操作分享。

使用到的SQL技术

MySQL部分

查询某个库的所有表名称

select table_name from information_schema.tables where table_schema='数据库名';

查询某个数据库中所有的表名 列名 字段长度

SELECT TABLE_NAME as '表名', COLUMN_NAME as '列名',COLUMN_COMMENT,DATA_TYPE as '字段类型' ,COLUMN_TYPE as '长度加类型' FROM information_schema.`COLUMNS` where TABLE_SCHEMA='数据库名' order by  TABLE_NAME,COLUMN_NAME

sqlserver部分

SQLserver 查询当前库 所有表名

SELECT Name FROM SysObjects Where XType='U' ORDER BY Name;

查询数据库中重复数据按照ID查询

SELECT id FROM 数据库名 where id<>'' GROUP BY id HAVING COUNT(*)>1

删除一个表中各字段完全相同情况,只留一条数据

-- delete  top(1) from 数据库名 where id =id值

删除日志

USE [master]
GO
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE   --简单模式
GO
USE 数据库名
GO
DBCC SHRINKFILE (N'数据库名_log' , 2, TRUNCATEONLY)  --设置压缩后的日志大小为2M,可以自行指定
GO
USE [master]
GO
ALTER DATABASE 数据库名 SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE 数据库名 SET RECOVERY FULL  --还原为完全模式
GO

修改表字段

alter table 数据库名 alter column 字段名	字段类型(长度)

解决sqlserver问题:超时时间已到。在操作完成之前超时时间已过或服务器未响应。

1、点开菜单栏:工具 - > 选项

2、设置脚本执行超时时间(根据自己需求,0为不限制)

3、设置链接字符串更新时间(根据自己需求,范围为1-65535)

Navicat Premium 16 无限试用

@echo off

echo Delete HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Registration[version and language]
for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium" /s | findstr /L Registration"') do (
    reg delete %%i /va /f
)
echo.

echo Delete Info folder under HKEY_CURRENT_USER\Software\Classes\CLSID
for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\Classes\CLSID" /s | findstr /E Info"') do (
    reg delete %%i /va /f
)
echo.

echo Finish

pause

迁移数据成功后遇到的问题

  1. 部分表数据会重复,多次尝试迁移引起,需要手动删除重复数据,极小概率出现,一般出现在数据量大的表;
  2. 部分表字段类型会改变,迁移工具会自动转换成SqlServer支持字段类型,并会影响部分应用服务,使其不能正常启动,需要开发同事定位并修改成正确类型;
  3. 部分表会出现没有主键和索引的现象,需要自行手动添加;
  4. 表字段类型及索引、主键修改,如果逐表修改的话,工作量会很大。

写在最后

整个迁移过程,共耗时近两周,比我想象中的要难得多,遇到的问题也是真的很棘手,不得不说,当数据量很大时,确实会给数据的操作带来巨大挑战。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 将SQL Server中的数据迁移MySQL可以通过以下步骤实现: 1. 将SQL Server中的数据导出为CSV或Excel格式的文件。 2. 在MySQL中创建相应的表结构。 3. 将导出的数据文件导入MySQL中。 4. 验证数据是否正确导入。 需要注意的是,在进行数据迁移时,需要考虑数据类型、字符集等因素,以确保数据的完整性和准确性。同时,还需要注意SQL Server和MySQL之间的差异,例如SQL语法、函数等方面的差异,以避免出现错误。 ### 回答2: 数据迁移是当企业需要更换或升级数据库时,经常遇到的问题。对于企业来说,有时需要把 SQL Server 数据库转移到 MySQL 数据库中。下面我将从数据结构比较、迁移工具选择和迁移前后注意事项三个方面详细介绍 SQL Server 数据迁移MySQL 的具体步骤及注意点。 1. 数据结构比较 在进行数据迁移之前,我们需要先对 SQL Server 和 MySQL 数据库数据结构进行比较,以确定目标 MySQL 数据库是否可以容纳 SQL Server 数据库中的全部数据。SQL Server 和 MySQL 之间的区别很大,尤其是在数据类型和枚举上。因此在迁移之前,需要先确定 SQL Server 数据库中所使用的数据类型是否与 MySQL 数据库兼容。 2. 迁移工具选择 与选择其他的数据库迁移工具相比,选择可靠的工具可以简化数据库迁移过程。例如,如果你想将 SQL Server 数据库迁移MySQL,可以使用 MySQL Workbench 数据库迁移工具。这个工具可以将 SQL Server 数据库转移为 MySQL 脚本,从而帮助您完成数据迁移的过程。而且,这个工具是免费的,并且易于使用。 3. 迁移前后注意事项 在 SQL Server 数据迁移MySQL 之前,您需要做好以下准备工作: ● 创建与 SQL Server 数据库相应的 MySQL 数据库,并在 MySQL 数据库中创建表。 ● 将 SQL Server 数据库数据转换为 MySQL 数据库中的数据类型,并将数据存储在临时数据文件中。 ● 在转移之前,检查所有 SQL Server 数据库的约束和约束规则是否在 MySQL 数据库中得到满足。 在迁移期间,您需要注意以下几点: ● 在迁移过程中,要保证源数据库 SQL Server 的一致性和完整性。 ● 在导入数据之前,确保在 MySQL 数据库中创建了相应的表,并设置正确的列属性。 ● 在进行数据导入时,将导入数据逐步验证,以确保数据的一致性和准确性。 ● 在迁移完成后,请进行数据验证,确保 MySQL 数据库中的数据与 SQL Server 数据库中的数据没有发生变化,数据完整性得到保证。 综上所述,SQL Server 数据迁移MySQL 的过程需要经过细致的计划和操作,需要注意数据结构比较、迁移工具选择和迁移前后注意事项三个方面的问题,才能顺利完成数据迁移的任务。 ### 回答3: 对于将SQL Server数据迁移MySQL的过程,需要考虑以下几个方面。 1. 数据结构转换:SQL Server和MySQL数据类型存在一定的区别,因此在进行数据迁移之前需要对数据类型进行转换。例如,SQL Server的datetime类型在MySQL中可以转换为timestamp类型。此外,还需要注意区分SQL Server的nvarchar类型和MySQL的varchar类型。 2. 数据迁移方法:数据迁移可以通过手动方法进行,即逐个表进行转换和导入,也可以通过数据库迁移工具来进行。如果是手动方法,则需要先将SQL Server的数据转换为MySQL能够识别的格式,然后将数据导入MySQL中。如果使用数据库迁移工具,则可以自动完成数据结构转换和数据导入。 3. 数据安全性:在进行数据迁移过程中需要注意数据的安全性,包括数据完整性和数据准确性。在进行数据结构转换和数据导入之前,需要对数据进行备份和验证,以确保数据迁移后没有数据损失和数据错误。 4. 数据库配置:迁移完成后,需要对MySQL数据库配置进行相应的更改,以使其与SQL Server的配置相同。这包括字符集、存储引擎等配置。 除了以上几个方面,还需要考虑数据迁移的时间和资源消耗。对于较大的数据库迁移,可能需要在非工作时间进行,以避免对业务造成影响。此外,还需要考虑服务器资源和网络带宽的使用情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值