如何将数据从SQL Server 2005导出到MySQL

90

我一直在针对SQL Server 2005努力获取大量数据。我收到了一个包含近300个表的数据库,现在需要将其转换为MySQL数据库。我的第一个尝试是使用bcp,但不幸的是它不能生成有效的CSV文件,因为字符串没有被封装,所以您不能处理任何包含逗号(或其他用作分隔符)的字符串的行,而且仍然需要手写所有的创建表语句,因为显然CSV并不能告诉您有关数据类型的任何信息。

更好的方法是如果有一些工具可以连接到SQL Server和MySQL,然后进行复制。您将失去视图、存储过程、触发器等,但从一个DB复制仅使用基本类型的表并不难……是吗?

有人知道这样的工具吗?我不介意它做出多少假设或简化,只要它支持整数、浮点数、日期时间和字符串即可。无论如何,我都必须进行大量的修剪、规范化等操作,所以我不关心保留键、关系或任何其他内容,但我需要快速地获得初始数据!


1
我听说有些人使用MSSQL2MySQL成功了,但我自己无法保证。 - Greg Hurlman
1
我听说SQLYob可以做到这一点。 http://www.webyog.com/en/ 在这里: http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1196733,00.html# - borjab
这个工具正是你所要求的:Full Convert Enterprise。确实,你会失去视图、过程和触发器,但它针对大型表进行了高度优化。另一个解决方案(更昂贵),可以翻译所有对象(过程等):SqlTran SQL Server to MySQL - Damir Bulic
1
类似的答案在这里:http://stackoverflow.com/questions/11619177/sql-server-2008-r2-to-mysql-migration/11625261#11625261 - Jacob
1
@borjab:SQLyog在早期版本中可以使用ODBC,但现在不再支持,因此它不适用于此工作。 - BlaM
5个回答

59
我发现最好的方法是使用MySQL提供的MySQL迁移工具包。我已成功地将其用于一些大型迁移项目。

2
+1 - 它现在已经停止维护,并且MySQL Workbench即将包含迁移插件(5.2版本以后),但目前请使用以下链接:http://dev.mysql.com/downloads/gui-tools/5.0.html。 - Mark Robinson
不想转换日期或日期时间列 :( - Robert Ivanc
1
注意:目前MySQL迁移工具包在Linux上不可用(来自http://dev.mysql.com/doc/migration-toolkit/en/gui-tools-installation-linux.html) - mkirk
1
请注意,MySQL迁移工具包需要32位版本的JDK 5更新8或更高版本(必须为ver 5,ver 6无法使用),您可以在此处下载:http://tinyurl.com/5snd6y3。 - casterle

9
SQL Server 2005的“标准”、“开发人员”和“企业”版本都有SSIS,取代了SQL Server 2000中的DTS。SSIS具有与自己的DB的内置连接,并且您可以找到其他人为MySQL编写的连接。这里是一个例子。一旦您拥有连接,就应该能够创建一个SSIS包,在两者之间移动数据。
我不需要从SQLServer移动数据到MySQL,但我想象一旦安装了MySQL连接,它与在两个SQLServer DB之间移动数据的操作相同,非常简单直接。

9
使用MSSQL Management Studio,我已经使用MySQL OLE DB转移了表格。右键单击数据库,选择“Tasks->Export Data”,然后您可以指定MsSQL OLE DB源、MySQL OLE DB源,并创建两个数据源之间的列映射。您可能想要预先设置MySQL目标上的数据库和表格(导出将自动创建表格,但这通常会导致失败)。您可以使用“Tasks->Generate Scripts”通过右键单击数据库快速在MySQL中创建表格。一旦生成了创建脚本,您需要逐步搜索/替换MSSQL到MYSQL中存在的关键字和类型。当然,您也可以像平常备份数据库一样,并找到一个能够在MYSQL上还原MSSQL备份的实用程序。但我不确定是否存在这种实用程序。

8
自己编写PHP解决方案肯定可行,但我不确定是否有好的方法自动复制一个数据库模式到另一个数据库中(也许这就是你的问题所在)。
如果你只是拷贝数据,和/或者你需要自定义代码来在两个数据库之间转换修改后的模式,我建议使用PHP 5.2+和PDO库。你可以使用PDO ODBC连接(并使用MSSQL驱动程序)。我曾经使用其他库从MSSQL中获取大文本字段和多字节字符时遇到了很多问题。

6

另一个值得一试的工具是SQLMaestro套件。虽然准确地确定所需的工具有点棘手,但他们提供了各种工具,包括免费和付费版本,可以处理多个数据库平台的各种任务。建议首先尝试MySQL的数据向导工具,因为我认为它将具备您所需的正确的“导入”工具。


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