如何将一个SQL Server .bak文件导入到MySQL中?

标题是自解释的。 有没有办法直接进行这种导入?

来自SQL服务器的.BAK文件是Microsoft磁带格式(MTF)ref: 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 (以pipe理员身份login)

然后发出以下命令。

 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 

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

我没有设法find一个直接做的方法。

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

像魅力一样工作!

MySql有一个应用程序从Microsoft SQL中导入数据库。 脚步:

  1. 打开MySql Workbench
  2. 点击“数据库迁移”(如果没有出现,你必须从MySql更新安装它)
  3. 使用简单向导按照迁移任务列表。
  1. 在本地机器上打开SQL Server Management Studio。
  2. 右键单击数据库文件夹。 从popup菜单中select新build数据库。
  3. input数据库名称,然后单击确定。
  4. 右键单击新的数据库图标。 从popup菜单中select“任务” – >“还原” – >“数据库”。
  5. select从设备选项,然后单击浏览button。
  6. 单击添加并导航到适当的文件。 点击确定。
  7. 在“恢复数据库”窗口中,选中BAK文件旁边的checkbox。
  8. 切换到选项页面。 select覆盖现有数据库checkbox。 点击确定。
  9. validation数据库的内容,该数据库现在在本地计算机上处​​于活动状态。

虽然我的MySQL背景是有限的,但我认为你没有太多的运气。 但是,通过将数据库还原到MSSQL服务器,然后创build一个SSIS或DTS包来将您的表和数据发送到MySQL服务器,您应该能够迁移所有数据。

希望这可以帮助

我非常怀疑这一点。 Levi说,你可能想用DTS / SSIS来做这件事。 一个人认为你可能想要做的是启动过程,而不实际导入数据。 只要做足够的基本表结构在一起。 那么你会想要改变产生的表格结构,因为无论什么结构tat可能会被创build将是最好的摇摇欲坠。

您可能还需要更进一步,创build一个临时区域,首先将所有数据纳入string(varchar)forms。 然后,您可以创build一个脚本,进行validation和转换,将其转换为“真实”数据库,因为两个数据库并不总是很好地协同工作,特别是在处理date时。

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

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

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

安装完成后,转到Windows命令提示符下:

使用sqlcmd -S \ SQLExpress(以pipe理员身份login)

然后发出以下命令。

从磁盘恢复filelistonly ='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'; 走

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

在这一点上,我尝试了与MSSQL“SQL导入和导出向导”附带的工具,但csv转储的结果只包括列名称…

所以我只是从SQL Server Management Studio中导出了诸如“select * from users”之类的查询结果

SQL Server数据库是微软专有的。 我能想到的两个select是:

  1. 将数据库转储成CSV,XML或类似的格式,然后加载到MySQL中。

  2. 安装ODBC连接到MySQL,然后使用DTS传输数据。 正如查尔斯·格雷厄姆所build议的那样,在做这件事之前,你可能需要build立表格。 但是,就像从SQL企业pipe理器窗口剪切并粘贴到相应的MySQL窗口一样简单。

对于那些试图解决上述问题的人来说,下面是一些可能有助于导航常见错误的附加信息:

1)当运行恢复filelistonly你可能会得到操作系统错误5(访问被拒绝)。 如果是这种情况,请打开SQL Serverconfigurationpipe理器并将SQLEXPRESS的login更改为具有本地写权限的用户。

2)@“这将列出备份的内容 – 你需要的是第一个告诉你逻辑名称的字段” – 如果你的文件列出了两个以上的头文件,你还需要考虑如何处理这些文件RESTORE DATABASE命令。 如果您不指定如何处理数据库和日志以外的文件,系统将显然尝试使用.bak文件中列出的属性。 从其他人的环境中恢复文件将产生一个'path具有无效的属性。 它需要是一个目录“(因为你的机器上没有问题的path)。 简单地提供一个MOVE语句就可以解决这个问题。

在我的情况下,有第三个FTDatatypes的文件。 我添加的MOVE命令:

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

在我的情况下,我实际上不得不为第三个文件创build一个新的目录。 最初我试图把它发送到与.mdf文件相同的文件夹,但是当我执行还原时,第三个FTData文件产生了“未能正确初始化”的错误。

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

尝试使用etlalchemy将您的SQL Server数据库迁移到MySQL中。 它是我创build的一个开源工具,可以方便地在不同的RDBMS之间进行迁移。

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