我正在尝试将 SQL Server 数据库备份文件 ( .bak
) 转换为 MySQL。这个问题和答案非常有用,我已经成功导入数据库,但现在卡在导出到 MySQL 上。
建议使用MySQL Migration Toolkit,但似乎已被MySQL Workbench取代。是否可以像迁移工具一样使用 MySQL Workbench 从 SQL Server 迁移?
还是迁移工具包在某处仍然可用?
我正在尝试将 SQL Server 数据库备份文件 ( .bak
) 转换为 MySQL。这个问题和答案非常有用,我已经成功导入数据库,但现在卡在导出到 MySQL 上。
建议使用MySQL Migration Toolkit,但似乎已被MySQL Workbench取代。是否可以像迁移工具一样使用 MySQL Workbench 从 SQL Server 迁移?
还是迁移工具包在某处仍然可用?
您可以使用MySQL Workbench,它提供了一种以更少的时间和精力将数据和应用程序从 Microsoft SQL Server 快速迁移到 MySQL 的方法。
这个工具有很多很酷的功能,比如:
PhpMyAdmin 有一个导入向导,让您也可以导入 MSSQL 文件类型。
有关它支持的数据库脚本类型,请参见http://dev.mysql.com/doc/refman/5.1/en/sql-mode.html。
如上所述,如果您的数据中包含制表符、逗号或换行符,那么使用 CSV 导出和导入它将会非常困难。值将溢出字段,您将收到错误。如果您的任何长字段包含带有换行符的多行文本,则此问题会更加严重。
在这些情况下,我的方法是使用 BCP 命令行实用程序从 SQL Server 导出数据,然后在 MySQL 中使用 LOAD DATA INFILE .. INTO TABLE 命令重新读取数据文件。BCP 是最古老的 SQL Server 之一命令行实用程序(可以追溯到 SQL Server 的诞生 - v6.5)但它仍然存在并且仍然是获取数据的最简单和最可靠的方法之一。
要使用此技术,您需要在 MySQL 中创建具有相同或等效架构的每个目标表。我通过右键单击 SQL 企业管理器中的数据库,然后单击 Tasks->Generate Scripts... 并为所有表创建一个 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 "ComputerName\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 Server 与 MySQL 对话,反之亦然。
您可以使用Data Loader工具轻松完成此操作。在使用这个工具之前我已经这样做了,发现它很好。
看起来您是对的:迁移工具包将与 MySQL Workbench 集成 - 但我认为这还没有完成。请参阅 MySQL GUI 工具(包括迁移工具包)的生命周期结束公告:
http://www.mysql.com/support/eol-notice.html
MySQL 维护 MySQL GUI 工具包的存档:
我在 MySQL Migration Tool Kit 的 Advanced 选项卡上使用以下连接字符串连接到 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 迁移工具包进行 MSSQL 连接。
我有一些必须从 mssql 到 mysql 的数据,很难找到解决方案。所以我最后做了什么(有点冗长的方法,但作为最后的手段它有效)是:
单击左上角的框以选择整个表格:
将数据复制到剪贴板 (ctrl + v)
希望这可以帮助
MySQL 迁移工具包 (1.1.10) 仍可从此处下载:
http://downloads.mysql.com/archives.php?p=MySQLDeveloperSuite&v=1.1.10
官方网站 ( http://dev.mysql.com/downloads/gui-tools/5.0.html ) 上不再提供下载,请查看此处:http: //download.softagency.net/MySQL/Downloads /MySQLGUI工具/