SQL Server 迁移到 MySQL 的方法

0    217    1

Tags:

👉 本文共约7425个字,系统预计阅读时间或需28分钟。

(一) 使用工具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

img

Overview界面点击start…


连接源数据库

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

img


目标选择

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

img


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

img


选择需要转移的数据库

img


接下来就一直next就可以了

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

img



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

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

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

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

img

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

img

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

img

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

img

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

img

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

img

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

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

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

img

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

img

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

img

3、Mysql数据库之间的传递

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

img

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

img

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

img

img

运行的结果如下所示。

img

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

4、底层的Mysql数据库支持

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

img

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

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

img

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

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

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复