Mysql

使用 Workbench 導出。視圖不再起作用

  • May 30, 2013

我正在使用我的生產數據庫機器(Ubuntu Linux)上的 Workbench 5.2。我一直在嘗試導出。首先嘗試.. 我選擇了整個架構,包括右側視窗中的所有表和視圖。

當我將這些數據導入我的測試機器時,所有視圖都以表格形式出現。顯然不是我想要的,因為他們現在不返回任何數據……而且它現在是一張桌子。

但這就是我感到困惑的地方。我可以看到如何只導出表格。但是如何將視圖導出並輸入測試機?

在此過程中的某處可能會發生錯誤,因為這會導致您所看到的內容。

原因如下:

定義視圖時,該視圖引用的視圖或表必須已經存在:

mysql> CREATE VIEW broken_view AS SELECT some_column FROM nonexistent_table;
ERROR 1146 (42S02): Table 'test.nonexistent_table' doesn't exist

出於這個原因,mysqldump生成一個轉儲文件,其中包含將所有視圖定義為等效(ish)表的語句,然後一一返回並刪除表並創建視圖。這避免瞭如果任何視圖引用另一個視圖或引用尚未恢復的表(表按字母順序恢復)時會發生的問題。

錯誤可能是在生成轉儲文件時——如果您的任何現有視圖無效——例如,它們引用不存在的表或列,或者引用DEFINER不存在或沒有適當權限的使用者,或者如果您沒有足夠的權限 - 無法提取它們的定義,因為SHOW CREATE VIEW僅適用於有效視圖。

如果通過說明的方式,您針對一個表創建一個視圖,然後刪除該表,您會發現您不能再SHOW CREATE VIEW針對該視圖。

如果您的視圖引用了不在目標伺服器上的不同模式中的表,您將遇到類似的問題,因為它們的定義不會被接受。

作為對幾乎所有圖形工具都有強烈反感的人,我無法忍受 Workbench,但我相信它mysqldump在幕後使用,所以這很可能是問題的本質。

導出文件應該是人類可讀的。如果在文件末尾有視圖定義,則在您恢復文件時出現問題。如果不是,那麼您遇到了阻止導出完成的問題,並且 Workbench 可能不會向您顯示錯誤……但是不完整的導出(或導入)將正是視圖被定義為目標表的解釋伺服器。

引用自:https://dba.stackexchange.com/questions/43327