2010-03-25 154 views
6

我知道SQL轉儲是一系列反映數據庫內所有記錄的插入SQL語句。但是它用於什麼?我們爲什麼要轉儲數據庫記錄?每個數據庫是否都支持傾銷功能?sql-dump是什麼?

回答

14

有點奇怪,這實際上是備份數據庫的常用方法。由於各種複雜的原因,複製實際保存數據的文件本身並不是常用的備份方法。

所有的數據庫都以這種方式工作,或者至少我從來沒有聽說過沒有:它們都有一個工具來導出一堆SQL代碼,它們在執行時會以相同的狀態重新創建數據庫它在轉儲開始時。

但是,由於不同數據庫系統使用的SQL各種方言之間存在細微的差異,因此這些各種格式通常是不兼容的。有些工具可以在其中一些工具之間進行轉換,但我不知道任何處理每種可能情況的「Rosetta Stone」。

除了作爲備份數據庫的主要方法之外,當在不同服務器之間(例如從開發到測試到生產)暫存分貝數據時,此技術也很有用。

2

mysqldump產生一個或多個表或數據庫的數據的SQL表示。由於格式是SQL,因此它將在任何其他MySQL服務器上運行,而不管體系結構或主要/次要版本(顯然,視圖對於4.x等不起作用,但主要與前向兼容)。

還有另外一個工具,mysqlhotcopy,但是由於這個工具生成二進制文件,它們綁定到它們已經生成的機器上,並且不能在其他地方使用。 SQL具有在任何MySQL服務器上運行的優點,並且獨立於數據庫的基礎文件存儲機制。

兩個主要用例傾銷SQL是:

  • 備份數據庫的數據。可以將SQL讀入(「回放」)到一個空的數據庫服務器,並且它將重新創建表格並用行填充它們。
  • 將數據遷移到其他服務器。假設你從MySQL 5.0升級到5.1。你有兩臺機器。您可以使用mysqldump在5.0機器上生成SQL轉儲,並將其轉儲到5.1中。

有一些不太常見的用途。例如,應用程序數據庫的SQL快照可用於針對已知狀態進行單元測試。也可以將SQL代碼轉換成另一種方言,例如, PostgeSQL或SQLite,將您的數據移植到另一個數據庫。

您詢問其他數據庫是否提供SQL轉儲功能。幾乎所有情況下的答案都是肯定的。 PostgreSQL提供了pg_dump,SQLite有一個.dump命令等。

相關問題