标题是不言自明的。有没有办法直接进行这种导入?
10 回答
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 脚本。
MySql 有一个从 microsoft sql 导入 db 的应用程序。脚步:
- 打开 MySql 工作台
- 单击“数据库迁移”(如果没有出现,您必须从 MySql 更新安装它)
- 使用简单的向导遵循迁移任务列表。
在这个问题中,答案没有及时更新。因此,很高兴地说,在 2020 年迁移到MsSQL
这里MySQL
非常容易。像RebaseData这样的在线转换器将一键完成您的工作。您只需上传.bak
来自的文件MsSQL
并将其转换.sql
为可读的格式即可MySQL
。
附加说明:这不仅可以转换您的.bak
文件,而且该站点适用于您想要的所有类型的数据库迁移。
尽管我的 MySQL 背景有限,但我认为您在这方面运气不佳。但是,您应该能够通过将 db 恢复到 MSSQL 服务器,然后创建 SSIS 或 DTS 包将表和数据发送到 MySQL 服务器来迁移所有数据。
希望这可以帮助
我对此表示高度怀疑。正如 Levi 所说,您可能希望使用 DTS/SSIS 来执行此操作。有人认为您可能想要做的是在不实际导入数据的情况下启动该过程。只需将基本表结构放在一起就足够了。然后,您将要围绕生成的表结构进行更改,因为可能创建的任何结构 tat 充其量都是不稳定的。
您可能还需要更进一步,并创建一个暂存区域,该区域首先以字符串 (varchar) 形式接收所有数据。然后,您可以创建一个执行验证和转换的脚本,以将其放入“真实”数据库,因为这两个数据库并不总是能很好地协同工作,尤其是在处理日期时。
SQL Server 数据库是 Microsoft 专有的。我能想到的两个选择是:
以 CSV、XML 或类似格式转储数据库,然后将其加载到 MySQL。
设置与 MySQL 的 ODBC 连接,然后使用 DTS 传输数据。正如查尔斯格雷厄姆所建议的那样,您可能需要在执行此操作之前构建表格。但这就像从 SQL 企业管理器窗口剪切和粘贴到相应的 MySQL 窗口一样简单。
我使用的方法包括 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 导出了诸如“从用户中选择 *”之类的查询结果
对于那些尝试上述 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 文件上产生了“无法正确初始化”错误。
SQL Server 中的 .bak 文件特定于该数据库方言,并且与 MySQL 不兼容。
尝试使用etlalchemy将您的 SQL Server 数据库迁移到 MySQL。它是我创建的一个开源工具,用于促进不同 RDBMS 之间的轻松迁移。