使用 Workbench 導出。視圖不再起作用
我正在使用我的生產數據庫機器(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 可能不會向您顯示錯誤……但是不完整的導出(或導入)將正是視圖被定義為目標表的解釋伺服器。