SQL Server 迁移到 MySQL 的方法
Tags: 数据迁移
若是少量的表数据迁移,那么可以使用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下的数据格式;
如果有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的驱动,填入相应的信息,如下界面所示。
然后在下一步选择需要导出的表信息。
很不幸,这种方式操作数据库的导出操作没有办法成功。
既然通过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
- 迁移步骤
1、使用sqlyog连接目标 数据库
连接目标数据库
2、选择目标数据库(需要先把表结构建好,从SQL Server同步表结构也可以使用工具,很早以前导的表结构,忘了用的什么工具)
选择数据库
3、选中数据库后点击工具栏【高级工具】——》【导入外部数据...】,选择【开始新工作】点击下一步
4、选择【任何ODBC数据源】,选择【文件DSN】,点击【建立新的DSN...】
5、选择【文件数据源(与机器无关)】,点击下一步
6、选择【sql server】,点击下一步
7、保存DSN文件至任意位置,我这里保存至桌面,文件名为test,点击【下一步】【完成】
8、描述任意输入,输入sql server数据库地址,点击【下一步】
9、输入连接信息,点击【下一步】
10、选择源数据库,点击【下一步】
11、数据源 测试
12、回到选择数据源页面,选择刚刚创建的dsn文件,输入数据源凭据(sql server用户名密码),点击【下一步】
13、输入 MySQL数据库凭据,选择数据库为目标数据库,点击【下一步】
14、选择【从数据源拷贝表】,点击【下一步】
15、选择SQL Server库中需要迁移数据的表
16、狂点下一步,等待完成
- 结论:在本地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,中文也没有什么问题.