2008-10-01 498 views
52

標題不言自明。有沒有辦法直接進行這種導入?如何將SQL Server .bak文件導入到MySQL中?

+3

也[覆蓋dba.stackexchange](http://dba.stackexchange.com/q/20078/1580) – 2012-06-28 16:55:01

+0

史詩問題兄弟!我Finaly設法從我的蹩腳的託管服務提供商那裏導入所有SQL工具被破壞的bak文件。 – ppumkin 2012-09-06 13:52:20

回答

58

從SQL Server的.bak文件是在Microsoft磁帶格式(MTF)參考:http://www.fpns.net/willy/msbackup.htm

比克文件可能會包含LDF和MDF文件SQL服務器用於存儲數據庫。

您將需要使用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 

此時你已提取的數據庫 - 然後連同this export tool安裝Microsoft's "Sql Web Data Administrator".,你將有一個包含數據庫的SQL腳本。

+1

謝謝理查德!給我一個果醬。 – 2010-01-20 16:26:52

+3

問題是SQL Server 2008速成版只能處理10GB和更小的數據庫文件。我有一個30GB的文件,我必須與之合作。工作中的Internet連接速度太慢,無法下載完整SQL Server 2008 R2版本的4GB .iso映像,這是我從學生處免費獲得的dreamspark.com。所以我有這個完全相同的問題。 – systemovich 2011-05-12 14:21:16

+0

第一個安裝軟件鏈接中斷 – 2015-05-19 17:31:09

2

儘管我的MySQL背景有限,但我認爲你沒有太多的運氣。但是,通過將數據庫還原到MSSQL服務器,然後創建SSIS或DTS包以將表和數據發送到MySQL服務器,您應該能夠遷移所有數據。

希望這有助於

0

我非常懷疑它。 Levi說,你可能想用DTS/SSIS來做這件事。一個人認爲你可能想要做的是啓動過程,而不實際導入數據。只需做足夠的基本表結構。那麼你會想要改變產生的表格結構,因爲無論結構達什麼可能會創建將最多搖搖欲墜。

您可能還需要更進一步,並創建一個臨時區域,該臨時區域首先以字符串(varchar)形式接收所有數據。然後,您可以創建一個腳本來進行驗證和轉換,以將其導入「真實」數據庫,因爲這兩個數據庫並不總是很好地協同工作,特別是在處理日期時。

0

SQL Server數據庫是微軟專有的。我能想到的有兩個選項:

  1. 轉儲CSV,XML或類似的格式,你想,然後加載到MySQL數據庫。

  2. 設置與MySQL的ODBC連接,然後使用DTS傳輸數據。正如查爾斯格雷厄姆所建議的那樣,在做這件事之前你可能需要建立表格。但是,就像從SQL企業管理器窗口剪切並粘貼到相應的MySQL窗口一樣簡單。

+0

如果我以.sql格式準備轉儲,它會起作用! – sandeep 2013-12-18 13:39:41

8

我沒有設法找到一種方法直接做到這一點。

相反,我將bak文件導入SQL Server 2008 Express,然後使用MySQL Migration Toolkit

工作就像一個魅力!

0

我用理查德·哈里森的方法包括的部分方法:

因此,安裝SQL Server 2008 Express的 版,

這需要Web平臺安裝程序的下載「wpilauncher_n.exe 「 一旦你有這個安裝點擊數據庫選擇(你還需要下載框架和運行時)

安裝後,轉到t他Windows命令提示符和:

使用SQLCMD -S \的SQLExpress(同時 系統管理員的身份)

然後發出以下命令。

從 恢復filelistonly disk ='c:\ temp \ mydbName-2009-09-29-v10.bak'; GO這將列出 備份的內容 - 您需要的是第一個 字段,告訴您邏輯名稱 - 一個將是實際的數據庫,另一個將是日誌文件。

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

我啓動了Web平臺安裝,並從什麼是新的標籤我安裝了SQL Server Management Studio並瀏覽該數據庫,以確保數據在那裏......

在這一點上我試過的工具包括MSSQL「SQL導入和導出嚮導」,但csv轉儲的結果只包括列名...

因此,我只是從SQL Server Management Studio中導出像「從用戶select *」查詢的結果

0

對於那些試圖理查德的解決方案bove,以下是一些可能有助於導航常見錯誤的其他信息:

1)當運行恢復filelistonly時,您可能會收到操作系統錯誤5(訪問被拒絕)。如果是這種情況,請打開SQL Server配置管理器並將SQLEXPRESS的登錄更改爲具有本地寫權限的用戶。

2)@「這將列出備份的內容 - 你需要的是第一個告訴你邏輯名稱的字段」 - 如果你的文件列出了兩個以上的標題,你還需要考慮做什麼與這些文件在RESTORE DATABASE命令中。如果您沒有指出如何處理數據庫和日誌以外的文件,系統顯然會嘗試使用.bak文件中列出的屬性。從其他人的環境中恢復文件將產生'該路徑具有無效的屬性。它需要是一個目錄'(因爲你的機器上沒有問題的路徑)。 只需提供MOVE語句即可解決此問題。

在我的情況下,有第三個FTData類型的文件。我添加的移動命令:

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

在我的情況下,我實際上必須爲第三個文件創建一個新的目錄。最初我試圖將它發送到與.mdf文件相同的文件夾,但是當我執行還原時,第三個FTData文件產生了'未能正確初始化'錯誤。

3
  1. 在本地計算機上打開SQL Server Management Studio。
  2. 右鍵單擊數據庫文件夾。從彈出菜單中選擇新建數據庫。
  3. 輸入數據庫名稱,然後單擊確定。
  4. 右鍵單擊新的數據庫圖標。從彈出菜單中選擇任務 - >還原 - >數據庫。
  5. 選擇從設備選項,然後單擊瀏覽按鈕。
  6. 單擊添加並導航到相應的文件。點擊確定。
  7. 在「還原數據庫」窗口中,選中BAK文件旁邊的複選框。
  8. 切換到選項頁面。選擇覆蓋現有數據庫複選框。 單擊確定。
  9. 驗證數據庫的內容,該數據庫現在在本地計算機上處​​於活動狀態。
6

MySql有一個應用程序從Microsoft SQL中導入數據庫。 步驟:

  1. 打開MySQL工作臺
  2. 點擊「數據庫遷移」(如果它不出現,你必須從MySQL更新安裝)
  3. 使用簡單的嚮導按照遷移任務列表。
0

SQL Server中的.bak文件特定於該數據庫方言,並且與MySQL不兼容。

嘗試使用etlalchemy將您的SQL Server數據庫遷移到MySQL中。它是我創建的一個開源工具,用於簡化不同RDBMS之間的遷移。

the github page上提供快速安裝和示例,關於該項目起源的更詳細的解釋可參見here