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

这篇具有很好参考价值的文章主要介绍了记一次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,下载安装.

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

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

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

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

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

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

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

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

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

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

生成的报告如下:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

第二种迁移工具使用

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

具体操作步骤如下:

建立MySQL、SqlServer连接,

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

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

双击MySQL的连接,建立连接

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

然后选择navicat 的左上角工具

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

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

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

数据将自动导入

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

第三种迁移工具

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

第一步:配置MySQL 连接

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

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

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

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

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

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

【端 口】:数据库端口

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

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

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

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

第二步:配置 SQL Server 连接

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

第四步:进行数据校验

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

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

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

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

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

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

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

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

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

以上就是 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为不限制)

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

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

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

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. 表字段类型及索引、主键修改,如果逐表修改的话,工作量会很大。

写在最后

整个迁移过程,共耗时近两周,比我想象中的要难得多,遇到的问题也是真的很棘手,不得不说,当数据量很大时,确实会给数据的操作带来巨大挑战。文章来源地址https://www.toymoban.com/news/detail-503428.html

到了这里,关于记一次MySQL数据迁移到SQLServer全过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mysql迁移到kingbase(人大金仓)全过程方案(java)

    按项目国产化需求,需要将MySQL数据库迁移成kingbase数据库,后端服务是java 现先用本地创建kingbase-win版服务器进行流程、代码测试 目录 前言: 流程: 一.从官网下载文件 1.下载安装包  2.下载需要的授权文件  3.下载数据库连接驱动文件​编辑  二.安装  ​编辑 三.数据库迁

    2024年02月04日
    浏览(57)
  • Mysql迁移到kingbase全过程调整方案解决(人大金仓)(java)

    按项目国产化需求,需要将MySQL数据库迁移成kingbase数据库,后端服务是java 现先用本地创建kingbase-win版服务器进行流程、代码测试 目录 前言: 流程: 一.从官网下载文件 1.下载安装包  2.下载需要的授权文件  3.下载数据库连接驱动文件​编辑  二.安装  ​编辑 三.数据库迁

    2024年02月16日
    浏览(40)
  • yum 安装mysql8数据全过程

    mysql8安装方式:(使用官方yum仓库) 1. wget https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm    安装      yum install mysql80-community-release-el7-4.noarch.rpm 2、生成yum源缓存 每次当我们编写了,都需要生成yum缓存,以免安装错误。  yum makecache   3、检查安装的yum源是否存在   

    2024年02月16日
    浏览(40)
  • MySQL8.0数据库超详细安装教程全过程

    1、官网下载MySQL8.0地址:MySQL :: Download MySQL Installer (Archived Versions) 2、 双击安装包进行安装 3、自定义安装 4、选择MySQL Server8.0   5、创建MYSQL数据存储目录及安装目录 6、配置安装路径及数据存储目录 7、确认继续 8、选择MySQL,下一步 9、开始安装 10、第一次安装需要C++的依赖

    2024年02月08日
    浏览(67)
  • 记录一次开机内存分析的全过程

    作者:zzy的学习笔记 记录一次开机内存分析的全过程,尽量详尽的介绍常用内存分析工具和命令行的使用,结合具体问题探讨开机内存分析的实践经验。通过这篇文章我会介绍开机内存的常用测试分析工具的基本使用方法,以及如何通过抓取出来的内存数据得出下一步的分析

    2024年02月07日
    浏览(41)
  • Unity连接数据库mysql全过程+可能遇到的问题与解决方案

    目录 一、具备条件 二、unity连接mysql 三、问题总结 1. Mysql安装完成         安装完成后需要查看mysql的版本,打开终端(管理者身份运行),输入以下语句登录mysql,查看MySQL版本; 可以看到我下载的版本是 5.7.38; 2. MySQL Connector/NET下载 目的:为了搭建unity连接mysql的环境

    2024年02月03日
    浏览(60)
  • 手术麻醉信息系统源码 php + mysql + vue2,覆盖患者就诊全过程,体征数据自动采集绘制

    手术麻醉信息系统源码 php + mysql + vue2  B/S网页版 麻醉信息系统是HIS产品的中的一个组成部分,主要应用于医院的麻醉科,属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程,包括手术申请与排班、审批、安排、术前、术中和术后。 技术架构:mysq

    2024年02月03日
    浏览(54)
  • 微信小程序保存相册授权全过程:第一次授权、已授权、拒绝后再授权

    微信小程序部分功能需要使用授权(也就是需要用户显式同意,系统会阻止开发者任何静默获取授权行为),以存储相册为例,用户需要获得\\\"scope.writePhotosAlbum\\\"权限 微信系统接口wx.getSetting可以获取已经获得的权限列表 在实际开发时,我们有时候并不会去特意处理权限,直接

    2024年02月09日
    浏览(46)
  • 研一小白记录第一次在实验室服务器上跑深度学习的代码全过程(实验室服务器上跑代码详细全过程哦)

    你在服务器上跑过代码吗?哇~你跑过!是啥样的...每回见别人跑都会问并且羡慕会在大服务器上跑代码的哈哈哈在研究生刚开学前还甚至不知道什么是服务器,更是无法想象在除了自己能看得见摸得着的电脑屏幕之外跑代码的样子。直到有天开会自己坐在了一个大大的“黑箱

    2024年02月02日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包