72

标题是不言自明的。有没有办法直接进行这种导入?

4

10 回答 10

71

SQL 服务器中的 .BAK 文件采用 Microsoft 磁带格式 (MTF) 参考:http ://www.fpns.net/willy/msbackup.htm

bak 文件可能包含 SQL Server 用于存储数据库的 LDF 和 MDF 文件。

您将需要使用 SQL 服务器来提取这些。SQL Server Express 是免费的,可以完成这项工作。

因此,安装 SQL Server Express 版本,然后打开 SQL Server Powershell。那里执行sqlcmd -S <COMPUTERNAME>\SQLExpress(以管理员身份登录时)

然后发出以下命令。

restore filelistonly from disk='c:\temp\mydbName-2009-09-29-v10.bak';
GO

这将列出备份的内容——你需要的是第一个告诉你逻辑名称的字段——一个是实际的数据库,另一个是日志文件。

RESTORE DATABASE mydbName FROM disk='c:\temp\mydbName-2009-09-29-v10.bak'
WITH 
   MOVE 'mydbName' TO 'c:\temp\mydbName_data.mdf', 
   MOVE 'mydbName_log' TO 'c:\temp\mydbName_data.ldf';
GO

此时您已经提取了数据库 - 然后安装Microsoft 的“Sql Web Data Administrator”。此导出工具一起,您将拥有一个包含数据库的 SQL 脚本。

于 2008-10-01T06:39:07.780 回答
10

MySql 有一个从 microsoft sql 导入 db 的应用程序。脚步:

  1. 打开 MySql 工作台
  2. 单击“数据库迁移”(如果没有出现,您必须从 MySql 更新安装它)
  3. 使用简单的向导遵循迁移任务列表。
于 2012-12-09T02:03:42.700 回答
8

我没有设法直接找到一种方法。

相反,我将 bak 文件导入 SQL Server 2008 Express,然后使用MySQL Migration Toolkit

像魅力一样工作!

于 2008-10-03T01:19:06.143 回答
7

在这个问题中,答案没有及时更新。因此,很高兴地说,在 2020 年迁移到MsSQL这里MySQL非常容易。像RebaseData这样的在线转换器将一键完成您的工作。您只需上传.bak来自的文件MsSQL并将其转换.sql为可读的格式即可MySQL

附加说明:不仅可以转换您的.bak文件,而且该站点适用于您想要的所有类型的数据库迁移。

于 2020-01-02T05:36:45.823 回答
3

尽管我的 MySQL 背景有限,但我认为您在这方面运气不佳。但是,您应该能够通过将 db 恢复到 MSSQL 服务器,然后创建 SSIS 或 DTS 包将表和数据发送到 MySQL 服务器来迁移所有数据。

希望这可以帮助

于 2008-10-01T04:52:34.680 回答
1

我对此表示高度怀疑。正如 Levi 所说,您可能希望使用 DTS/SSIS 来执行此操作。有人认为您可能想要做的是在不实际导入数据的情况下启动该过程。只需将基本表结构放在一起就足够了。然后,您将要围绕生成的表结构进行更改,因为可能创建的任何结构 tat 充其量都是不稳定的。

您可能还需要更进一步,并创建一个暂存区域,该区域首先以字符串 (varchar) 形式接收所有数据。然后,您可以创建一个执行验证和转换的脚本,以将其放入“真实”数据库,因为这两个数据库并不总是能很好地协同工作,尤其是在处理日期时。

于 2008-10-01T05:03:28.647 回答
1

SQL Server 数据库是 Microsoft 专有的。我能想到的两个选择是:

  1. 以 CSV、XML 或类似格式转储数据库,然后将其加载到 MySQL。

  2. 设置与 MySQL 的 ODBC 连接,然后使用 DTS 传输数据。正如查尔斯格雷厄姆所建议的那样,您可能需要在执行此操作之前构建表格。但这就像从 SQL 企业管理器窗口剪切和粘贴到相应的 MySQL 窗口一样简单。

于 2008-10-01T05:10:13.000 回答
1

我使用的方法包括 Richard Harrison 方法的一部分:

所以,安装 SQL Server 2008 Express 版本,

这需要下载 Web 平台安装程序“wpilauncher_n.exe” 安装后单击数据库选择(您还需要下载框架和运行时)

安装后转到 windows 命令提示符并:

使用 sqlcmd -S \SQLExpress (以管理员身份登录)

然后发出以下命令。

仅从磁盘恢复 filelist='c:\temp\mydbName-2009-09-29-v10.bak'; GO 这将列出备份的内容——你需要的是第一个告诉你逻辑名称的字段——一个是实际的数据库,另一个是日志文件。

RESTORE DATABASE mydbName FROM disk='c:\temp\mydbName-2009-09-29-v10.bak' WITH MOVE 'mydbName' TO 'c:\temp\mydbName_data.mdf', MOVE 'mydbName_log' TO 'c:\临时\mydbName_data.ldf';去

我启动了 Web 平台安装程序,并从新选项卡中安装了 SQL Server Management Studio 并浏览了数据库以确保数据在那里......

那时我尝试了 MSSQL“SQL 导入和导出向导”中包含的工具,但 csv 转储的结果只包括列名......

因此,我只是从 SQL Server Management Studio 导出了诸如“从用户中选择 *”之类的查询结果

于 2009-09-19T07:31:32.807 回答
1

对于那些尝试上述 Richard 解决方案的人,以下是一些可能有助于解决常见错误的附加信息:

1) 运行 restore filelistonly 时,您可能会收到操作系统错误 5(拒绝访问)。如果是这种情况,请打开 SQL Server 配置管理器并将 SQLEXPRESS 的登录名更改为具有本地写入权限的用户。

2)@“这将列出备份的内容-您需要的是第一个告诉您逻辑名称的字段”-如果您的文件列出了两个以上的标题,您还需要说明如何处理这些文件RESTORE DATABASE 命令。如果您不指明如何处理数据库和日志之外的文件,系统显然会尝试使用 .bak 文件中列出的属性。从其他人的环境中恢复文件将产生“路径具有无效属性。它必须是一个目录'(因为您的机器上不存在相关路径)。只需提供 MOVE 语句即可解决此问题。

就我而言,有第三个 FTData 类型文件。我添加的 MOVE 命令:

MOVE 'mydbName_log' TO 'c:\temp\mydbName_data.ldf',
MOVE 'sysft_...' TO 'c:\temp\other';

就我而言,我实际上必须为第三个文件创建一个新目录。最初,我尝试将其发送到与 .mdf 文件相同的文件夹,但是当我执行还原时,在第三个 FTData 文件上产生了“无法正确初始化”错误。

于 2011-08-24T17:19:13.017 回答
1

SQL Server 中的 .bak 文件特定于该数据库方言,并且与 MySQL 不兼容。

尝试使用etlalchemy将您的 SQL Server 数据库迁移到 MySQL。它是我创建的一个开源工具,用于促进不同 RDBMS 之间的轻松迁移。

github页面上提供了快速安装和示例,更详细的项目起源说明可以在这里找到。

于 2016-10-14T15:38:14.650 回答