ITPub博客

首页 > 数据库 > MySQL > 【迁移】SqlServer 迁移到 MySQL 方法

【迁移】SqlServer 迁移到 MySQL 方法

原创 MySQL 作者:lhrbest 时间:2020-11-24 15:34:29 0 删除 编辑

【迁移】SqlServer 迁移到 MySQL 方法

(一) 使用工具SQLyog、Navicat、MySQL Workbench或MSSQL2SQL

若是少量的表数据迁移,那么可以使用SQLyog、Navicat、MySQL Workbench或MSSQL2SQL等工具直接进行迁移。

Navicate提供了数据传输的功能,可以作为中间操作节点,将一个数据库复制到另一个库。操作简单,常规界面选择要同步的库和表,高级界面去掉创建索引、勾上遇到错误继续、其他基本默认即可。完成后注意看日志,如果有报错没有复制数据,请重新同步一下这些表,并在高级里勾上使用完整插入语句,这样我们在日志里,可以看到SQL语句,手动执行插入和调试错误即可。有表没同步,请手动建表。

 

MySQL Workbench提供了Migration Wizard(数据库迁移)功能,具体操作过程可以参考: https://dev.mysql.com/doc/workbench/en/wb-migration-wizard-connection.html

 

对于SQL Server的存储过程、函数和触发器等对象,需要自己手工进行改写,并充分测试才能进行迁移,否则迁移完成后会出现很多未知的问题。

 

一、原则:

只迁移表结构和数据,存储过程、函数、触发器尽量自己改写,并充分测试。

迁移前,先设置好数据库的一些参数,比如默认存储引擎,默认编码等,方便后续导入。

 

二、方法:

1、使用MySQL Workbench

  MySQL Workbench提供了Migration Wizard(数据库迁移)功能,支持MSSQL的数据形式转换为MYSQL下的数据格式;

  具体参照这篇文章:http://mysqlworkbench.org/2012/07/migrating-from-ms-sql-server-to-mysql-using-workbench-migration-wizard/

  如果有Not enough memory to allocate insert buffer of size 1073741824,请行Google解决。 可能是MySQL端max_allowed_packet、key_buffer_size大小设置的问题。

  博主的解决办法是,在windows机器新建一个MySQL数据库,作为中间导入库。然后再在两个MySQL库间同步数据。

 

注意:

  1)看日志文件wb.log的报错,复制结果以这个日志为准。

  2)source RMBMS 连接参数,Server填打开SSMS后,服务器属性后面那个名称(常规-名称)。


2、使用Navicat Premium -- 本人推荐

  Navicate 提供了数据传输的功能,可以作为中间操作节点,将一个数据库复制到另一个库。

  操作简单,常规界面选择要同步的库和表,高级界面去掉创建索引、勾上遇到错误继续、其他基本默认即可。

  完成后注意看日志,如果有报错没有复制数据,请重新同步一下这些表,并在高级里勾上使用完整插入语句,

  这样我们在日志里,可以看到SQL语句,手动执行插入和调试错误即可。有表没同步,请手动建表。


三、后续操作:

  1、手动改写存储过程、函数和触发器,并要经过程序充分测试检验。

  2、根据业务需求,添加合适的索引。

 

附:另外靠谱的两种方法: https://www.percona.com/blog/2016/06/23/migrate-from-ms-sql-server-to-mysql/





打开MySQL Workbench

Overview界面点击start…


连接源数据库

 

红框内是需要根据修改的地方,第三个红框是自己数据库服务器的名字


 

目标选择

目标是包含迁移数据的 MySQL 数据库。选择现有的 MySQL Workbench 连接,或从下拉列表中选择 Manage Stored Connections 以创建新的 MySQL 连接。


点击next后经过一段读条获得

 


选择需要转移的数据库


接下来就一直next就可以了

中途存在warning的界面不需要在意,跟着next就行,总体没有问题:not found





如果我们已经基于SQL Server进行了开发,并且具有很多基础的数据库数据了,那么我们可以利用SQL Server导出到MySQL数据库中,这种是我们常见的一种开发方式,毕竟基于SQLServer数据库开发起来会比较快速一些。

SQL Server数据库的管理工具是SQL Server Management Studio;而Mysql数据库的管理工具则推荐使用Navicat,这是一款非常强大好用的管理工具。

首先我们使用Navicat建立自己一个空白的Mysql数据库,用来承载SQL Server 的数据导出需要。

例如我们创建一个和SQL Server数据库同名的MVCWebMisTest数据库,并且设置它的字符集为默认或者UTF8的编码方式,如下所示。

然后利用SQL Server Management Studio进行数据的直接导出,选择【任务】【导出数据】,如下所示。

 

然后在弹出的数据库里面选择导入的数据源和目标,选择导入的数据源界面如下所示。

然后在目标里面选择Mysql的驱动,填入相应的信息,如下界面所示。

 

然后在下一步选择需要导出的表信息。

 很不幸,这种方式操作数据库的导出操作没有办法成功。

 

2、从Navicat中导入MS SQLServer数据库数据

既然通过SQL Server Management Studio无法导入数据到Mysql数据库中,那么我们尝试下Mysql的数据库管理工具Navicat,它也有数据传输(导入导出)的功能。

我们在刚才建好的数据库上面右键调出对应的【数据传输】功能,然后设置好数据的源和目标,如下所示。

执行数据传输操作,顺利完成,非常强大和方便,而且没有任何错误。如下界面所示。

检查数据库导入的数据表和数据,没有问题。

3、Mysql数据库之间的传递

那么如果我们需要部署到服务器,就需要把当前的Mysql数据库传递(或者还原)到服务器的MySQL数据库中,一般来讲,我们利用Mysql的Navicat管理工具就可以实现数据导出的sql文件里面,然后在服务器里面使用反向操作即可还原数据库成功的了。

 

转储SQL文件成功如下界面所示。

而在服务器的上面,我们可以利用Navicat的运行SQL文件即可还原Mysql数据库了。

运行的结果如下所示。

当然有时候也会发现存在一些表依赖引用的情况发生,不知道是不是Navicat版本出来的问题,不过如果有这个问题,只要不是编码的问题,都好解决,打开sql文件把创建表的顺序调整一下就可以了,我就碰到过这种极端的情况,把一些依赖表调整到前面来就可以顺利导入数据了。

4、底层的Mysql数据库支持 

 底层支持多种数据库,对我们开发不同类型的项目有着非常重要的支撑作用,我们不知道客户具体环境会选择那种数据库,如果我们扩展不同的数据库非常方便和迅速,无疑会给我们提供很好的控制力和信心。

采用了微软企业库Enterprise Library作为我们底层的数据库访问模块后,对于多种数据库的访问操作,就会统一采用这个企业库的数据库访问对象,操作起来非常一致,为了对不同数据库的常规增删改查等一些操作进行进一步的封装,已达到简化代码的目的,因此我们可以为每个不同的数据库定义一个数据访问操作基类,以便实现一些不同数据库差异性的处理,但是它们还是有一个共同的数据访问基类。

 采用不同的数据库,我们需要为不同数据库的访问层进行生成处理,如为SQLServer数据的表生成相关的数据访问层DALSQL,里面放置各个表对象的内容,不过由于采用了相关的继承类处理和基于数据库的代码生成,需要调整的代码很少。

我们为了不同的数据库准备了不同的数据库实现,不过也仅仅是特殊的接口调用而已,一般常规的增删改查以及分页等普通接口,全部交由基类接口实现即可。

如对于权限管理系统这个常规框架基础模块,多数据库的支持就非常必要的,它的数据库访问层如下所示。

不同的数据库访问层实现也是相差无几的,一般可以利用代码生成工具进行快速生成后,增加自定义接口实现即可。

而对于不同数据库的支持,直接复制过去,改动一下数据库实现层的命名空间和访问层的基类就可以了,如果有自定义SQL脚本上的差异,可以适当的修改即可。一般从一种数据库支持扩展到另外一种数据库支持,无非就是复制过去,进行调整一下即可,非常方便快速,这个就是整体框架支持的魅力和效率所在。

这样整合多种数据库支持的底层后,整个数据访问的架构设计如下所示。

有了这些底层支持,我们在配置文件选择不同的数据库的时候,选择性的保留其中一种数据库配置信息即可。下面是各种数据库支持的配置信息参考,一般保留一种即可。



使用sqlyog将sql server 迁移到mysql 


  • 使用软件工具sqlyog(64位)

使用sqlyog将SQL Server数据迁移至MySQL

sqlyog

  • 迁移步骤

1、使用sqlyog连接目标 数据库

使用sqlyog将SQL Server数据迁移至MySQL

连接目标数据库

2、选择目标数据库(需要先把表结构建好,从SQL Server同步表结构也可以使用工具,很早以前导的表结构,忘了用的什么工具)

使用sqlyog将SQL Server数据迁移至MySQL

选择数据库

3、选中数据库后点击工具栏【高级工具】——》【导入外部数据...】,选择【开始新工作】点击下一步

使用sqlyog将SQL Server数据迁移至MySQL

4、选择【任何ODBC数据源】,选择【文件DSN】,点击【建立新的DSN...】

使用sqlyog将SQL Server数据迁移至MySQL

5、选择【文件数据源(与机器无关)】,点击下一步

使用sqlyog将SQL Server数据迁移至MySQL

6、选择【sql server】,点击下一步

使用sqlyog将SQL Server数据迁移至MySQL

7、保存DSN文件至任意位置,我这里保存至桌面,文件名为test,点击【下一步】【完成】

使用sqlyog将SQL Server数据迁移至MySQL

8、描述任意输入,输入sql server数据库地址,点击【下一步】

使用sqlyog将SQL Server数据迁移至MySQL

9、输入连接信息,点击【下一步】

使用sqlyog将SQL Server数据迁移至MySQL

10、选择源数据库,点击【下一步】

使用sqlyog将SQL Server数据迁移至MySQL

11、数据源 测试

使用sqlyog将SQL Server数据迁移至MySQL

12、回到选择数据源页面,选择刚刚创建的dsn文件,输入数据源凭据(sql server用户名密码),点击【下一步】

使用sqlyog将SQL Server数据迁移至MySQL

13、输入 MySQL数据库凭据,选择数据库为目标数据库,点击【下一步】

使用sqlyog将SQL Server数据迁移至MySQL

14、选择【从数据源拷贝表】,点击【下一步】

使用sqlyog将SQL Server数据迁移至MySQL

15、选择SQL Server库中需要迁移数据的表

使用sqlyog将SQL Server数据迁移至MySQL

16、狂点下一步,等待完成

使用sqlyog将SQL Server数据迁移至MySQL

  • 结论:在本地PC机上实验,从远程SQL Server数据库导入总记录数约130W条数据到本地 mysql数据库,总耗时1714秒。对比源数据库与目标数据库的数据,没有发现异常及错误数据,对时间数字等处理都没有问题。






【1】MSSQL2SQL

SQL Server转换为MySQL工具,用了一下 感觉蛮不错的。

下载地址: https://www.jb51.net/softs/209207.html#downintro2

分享上来,同时也以便记录下来以后自用。

工具名称:Mss2sql

来个操作流程:

下载后打开压缩包

 

 

运行mss2sql

 

 

默认就是Move to MysQL server directly,选择下一步

 

 

继续下一步,稍等片刻

 

 

这次是需要连接到MySQL server了,我是本地,所以选择了Local,填写上你的用户名和密码

 

 

继续等待连接

 

 

选择在MS SQL里面需要转换的数据库

 

 

点下一步,如果mysql里面有同名的数据库,会让你来选择转换的方式,分别是

Overwrite the entire database:覆盖整个数据库Overwrite existing tables only:只覆盖存在的表Skip existing tables:跳过存在的表Merge:合并

 

 

我的mysql里面的只是一张空数据库,所以选了第一项,整个覆盖.

 

 

选择需要转换的表,添加到转换列表中,我是需要全部的表,所以选择了Add all

 

 

然后就是一段时间的等待

 

 

这个表里面的数据并不多,花费时间稍长,大概有10分钟,如果表大的话,可能用程序来转换会快一些,有方便的办法也请告之为谢

 

 

下面就是转换成功后的表格了,里面的数据OK,中文也没有什么问题.

 






About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在个人微 信公众号( DB宝)上有同步更新

● QQ群号: 230161599 、618766405,微信群私聊

● 个人QQ号(646634621),微 信号(db_bao),注明添加缘由

● 于 2020年11月完成

● 最新修改时间:2020年11月

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

● 小麦苗出版的数据库类丛书: http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用、MySQL、DBA学习班http://blog.itpub.net/26736162/viewspace-2148098/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

........................................................................................................................

请扫描下面的二维码来关注小麦苗的微 信公众号( DB宝)及QQ群(230161599、618766405)、添加小麦苗微 信(db_bao), 学习最实用的数据库技术。

........................................................................................................................

 

 



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2736464/,如需转载,请注明出处,否则将追究法律责任。

上一篇: MongoDB数据库迁移
请登录后发表评论 登录
全部评论
【QQ:646634621】【微信:db_bao】【微信公众号:DB宝】【11g、12c OCM】【QQ群:230161599、618766405】【《数据库笔试面试宝典》作者】【OCP、OCM、高可用(RAC+DG+OGG)、MySQL培训班已开讲,只讲实用内容】

注册时间:2012-09-23

  • 博文量
    1586
  • 访问量
    9183851