如何将SQL Server数据库导出到MySQL?

94

我正在尝试将SQL Server数据库备份文件(.bak)转换为MySQL。 这个问题和回答非常有用,我已经成功导入了数据库,但现在却无法将其导出到MySQL。

建议使用MySQL Migration Toolkit,但似乎已被MySQL Workbench取代。是否可以像迁移工具一样使用MySQL Workbench从SQL Server迁移?

还是迁移工具仍然可用?


3
我有一个 MS SQL 数据库,想要将其中的数据导入 MYSQL 中以替换原系统。我现在找到了一个旧版本的迁移工具包,但还没有成功连接到 MS SQL Server。 - matkins
也许这可以帮助。https://dev59.com/hXA75IYBdhLWcg3w_uqD#23088879 - Madagaga
3
我同意。尽管这个话题被标记为重复,但我仍然没有找到任何实质性的帮助我从MSSQL转换到MySQL的东西。 MSSQL到MySQL是一个因情况而异的话题。那些将此标记为重复的人相当无知,这是相当侮辱人的行为。 - Curly
1
希望这个视频对你有所帮助:https://www.youtube.com/watch?v=9OHXCYRYjRs - Nolwennig
11个回答

54
你可以使用MySQL Workbench,它提供了一种快速将数据和应用程序从Microsoft SQL Server迁移到MySQL的方法,节省时间和精力。
此工具有许多很酷的功能,如:
  • 数据库迁移 - 可以从Microsoft SQL Server、Sybase ASE和PostgreSQL进行迁移。
  • 迁移项目管理 - 允许配置、复制、编辑、执行和调度迁移。

阅读更多http://www.mysql.com/products/workbench/migrate/


我使用这个工具从我的 Mac 上的 SQL Server 迁移。还下载了驱动程序 http://www.actualtech.com/download.php 和 Mac 上的原始 ODBS 管理器。 - powder366
1
@powder366,你能具体说明一下如何将你的Mac连接到SQL Server吗?谢谢! - bizi
成功了!!!在从PhpMyAdmin导入失败(真的假的?)并尝试使用AWS的模式转换工具时,该工具拒绝在我的Win7和Win10电脑上安装而没有给出任何错误消息,我终于得到了一个可用的工具! 因为我无法在Workbench中创建到SQL-Server DB的“连接”,所以我认为我缺少一个可用的ODBC驱动程序。但我错了。看起来在Workbench中唯一可以连接到所述SQL-Server的地方是迁移对话框。 因此,我使用HeidiSQL在Workbench之外测试了我的连接。 感谢@Nolwennig提供的视频(在问题的评论中) - Balmipour
@Javier Cadiz,是否可以像SQL一样迁移存储过程和触发器? - er.irfankhan11
是和否,能够导出小型数据库,如果您有大量数据并且例如bigint PK出现错误;在迁移向导中的重试按钮存在错误,在这种情况下是虚假的。 - user1005462
需要注意的一点是,对于那些像我一样在 Parallels 虚拟机中遇到速度缓慢问题的人,需要将 MySQL 和 MSSQL 都安装在同一个虚拟机中。在我的情况下,从运行在虚拟机中的 MSSQL 转换到托管在 MacOS 上的 MySQL 的速度非常慢,插入 100 行带有 9 个文本列的数据需要大约 10 秒钟。 - m1ld

25

我使用sqlyog将MSSQL迁移到MySQL。我尝试过Migration toolkit and workbench,但由于sqlyog提供的SJA,我更喜欢使用它。我可以安排导入过程,并可以使用WHERE子句进行增量导入。

输入图像描述


1
温馨提示,您的链接 https://www.webyog.com/faq/content/27/114/en/introduction-to-the-_sqlyog-job-agent_-sja.html 不再可用。 - Hamza Khanzada
发现这比MySQL Workbench更好用。 - Rodney
它能够导入MySQL Workbench无法处理的SQLServer数据库。 - Fabio Rotondo

8

7

如果您有一个MSSQL兼容的SQL转储文件,可以使用此在线工具逐个将其转换为MySQL查询

http://burrist.com/mstomy.php

希望这能节省您的时间


小心使用这个,替换中存在一些逻辑缺陷。仅仅乍一看,我的表格中带有“go”的单词,比如“Categories”,都被改成了“Cate;ories”。尝试更改正则表达式为\bgo\b也没有起作用。 - Regular Jo

6
如上所述,如果您的数据中包含制表符、逗号或换行符,则使用CSV导出和导入将非常困难。值将溢出字段并出现错误。如果您的长字段中包含带有换行符的多行文本,则这个问题会更加严重。
在这种情况下,我的方法是使用BCP命令行实用程序从SQL服务器导出数据,然后使用MySQL中的LOAD DATA INFILE .. INTO TABLE命令将数据文件读回。BCP是最古老的SQL Server命令行实用程序之一(追溯到SQL Server-v6.5的诞生),但它仍然存在,并且仍然是获取数据的最简单、最可靠的方法之一。
要使用此技术,您需要在MySQL中创建每个目标表具有相同或等效的模式。我通过右键单击SQL企业管理器中的数据库,然后选择任务->生成脚本...并为所有表创建一个SQL脚本来完成这项工作。然后,您必须手动将脚本转换为与MySQL兼容的SQL,最后在MySQL数据库上运行CREATE TABLE命令,以便您具有匹配的表,列宽度与SQL服务器版本相同,为空且准备好数据。
然后,从MS-SQL侧导出数据如下。
bcp DatabaseName..TableName out TableName.dat -q -c -T -S ServerName -r \0 -t !\t!

如果您正在使用SQL Server Express,请像这样使用-S值:-S“计算机名称\ SQLExpress”,将生成一个名为TableName.dat的文件,其字段由![tab]!分隔,行由\ 0 NUL字符分隔。现在将.dat文件复制到MySQL服务器上的/tmp目录中,并像这样在MySQL端加载:
LOAD DATA INFILE '/tmp/TableName.dat' INTO TABLE TableName FIELDS TERMINATED BY '!\t!' LINES TERMINATED BY '\0';

请注意,在此示例中,表格(TableName)必须已经在MySQL端创建好。

当涉及到将SQL模式转换时,这个过程非常麻烦,但是即使是最困难的数据也可以使用它进行转换,并且由于它使用平面文件,您永远不需要说服SQL服务器与MySQL通信或相反。


5
你可以通过使用Data Loader工具轻松完成此操作。我之前就是用这个工具完成的,觉得很好用。

似乎这只适用于Windows操作系统。 - powder366

3
我在MySQL迁移工具的高级选项卡上使用以下连接字符串连接到SQL Server 2008实例:
jdbc:jtds:sqlserver://"sql_server_ip_address":1433/<db_name>;Instance=<sqlserver_instanceName>;user=sa;password=PASSWORD;namedPipe=true;charset=utf-8;domain= 

通常参数为“systemName\instanceName”。但在上面的例子中,不要添加“systemName\"(只使用InstanceName)。
要检查InstanceName应该是什么,请转到services.msc并检查MSSQL实例的DisplayName。它显示类似于MSSQL$instanceName。
希望这可以帮助从mysql migration toolKit连接MSSQL。

3

当然,这是实际情况。好消息是,通过http://dev.mysql.com/doc/migration-toolkit/en/scripted-migration.html,您可以自己完成。请查看GRT Shell和Lua脚本! - albfan
1
链接已经不存在了。 - powder366

2

1.1.x版本已停止支持,但仍可使用旧版本(最新版本为v1.0.25):https://downloads.mysql.com/archives/migration/ - Matias P.

1
我有一些数据需要从mssql导入到mysql,但是找到解决方法很困难。最终我采用了一个有点冗长的方法(但作为最后的手段它是有效的):

  • 在sql server management studio express中打开mssql数据库(我使用的是2005版本)
  • 逐个打开每个表格
  • 点击左上角的方框以选择整个表格:

  • 将数据复制到剪贴板(ctrl + v)

  • 打开ms excel
  • 将数据从剪贴板粘贴到excel中
  • 将excel文件保存为.csv格式
  • 对每个表格重复以上步骤
  • 现在您应该能够将数据导入到mysql中了

希望这可以帮助到您


1
看了其他答案,似乎可以使用MySQL Workbench进行迁移。为什么要手动操作呢?(如果只有几个表,您的方法可能有效,但如果有很多表,那就是一项永无止境的工作。) - Styxxy
你真的这样做了吗???? - Rafael Herscovici
这不是迁移,哈哈。这只是数据复制粘贴而已。迁移比这要更多,如果你有50个表,你会对它们全部执行此操作吗? - daminufe
你好,非常感谢你的精神去帮助他人,无论你知道什么。有些人可能不了解MySQL Workbench,但你提供的方法是非常可靠的,唯一的缺点是它不能导入数据结构。顺便说一句,我很喜欢你! - Ramesh Pareek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接