MySQL workbench的一個坑

2019-10-06 17:32:21

這是學習筆記的第 2091 篇文章


  今天一個開發同事找到我們,問能不能幫忙做一個儲存過程的恢復,因為這是一套開發測試環境,所以我們給了開發足夠的許可權使用,每天會在後端做一次資料庫備份工作。

  碰到這種資料恢復的情況,倒不是很稀奇了,不過我還是重新瞭解了下資料丟失的整個過程,根據描述這個儲存過程不是手工直接刪除的,這位同學是在workbench端打開了這個儲存過程,在這個基礎上進行修改,然後

儲存過程就不見了。我對於這種看起來奇怪的問題比較感興趣,於是就去他的工位那裡進行了解。 

   經過他的描述和環境的情況,這個儲存過程(假設是test_proc)通過workbench檢視不到,我在後端進行了檢查,在information_schema.routines裡面找了下,確實沒有,所以不是許可權丟失的問題。 

  為什麼這個儲存過程會平白無故的不見了呢,我和這位同學聊得更細了些,讓他在本地環境復現了下這個問題,他復現的步驟是:

  1. 建立一個新的儲存過程test_proc

  2. 通過workbench工具開啟,做一些編輯改動,故意修改幾處讓儲存過程存在一些編譯錯誤

  3. 編譯失敗,然後選擇不儲存退出

  4. 再次檢視列表發現,剛剛的儲存過程不見了。


   對於這個操作,我還是帶著一些幻想,如果是近期建立的,完全可以不用備份就從binlog裡面抓取得到儲存過程的語句,同時也可以看下在操作的那個時間節點,後端是不是做了drop的相關操作。 

結果分析binlog發現,裡面有多處drop procedure if exists的日誌,可見我們的儲存過程在變更中其實是分為兩個步驟,一個是刪除,一個是重建,而這個操作帶來的風險就是一旦不儲存退出,則會導致之前的變更被刷掉,這個問題嚴格來說是工具和使用中的理解的偏差導致。


  如果是一個線上業務,那問題就來了。

  目前對於MySQL應用開發來說,主要有以下的幾類客戶端工具,我們很少關注是否付費,也很容易忽略它和我們使用中的一些理解的偏差。

(1)SQLyog

SQLyog 是一個快速而簡潔的管理MySQL資料庫的圖形化工具,由業界著名的Webyog公司出品,屬於付費產品。

(2)Navicat

是一套快速、可靠並價格適中的資料庫管理工具,專為簡化資料庫的管理及降低系統管理成本而設計,它的設計符合資料庫管理員、開發人員及中小企業的需要,屬於付費產品。

(3)MySQL Workbench

為MySQL設計的ER/資料庫建模工具,可以支援資料庫管理、資料遷移、資料建模等功能,它同時有開源和商業化兩個版本。

(4)SQL developer

這個工具是Oracle推出的一款免費的資料庫管理工具,它主要支援Oracle,如果要支援MySQL,則需要額外下載一個驅動包。

   工具可以簡化我們的工作,但是顯然沒有完美的工具。有時候工具帶來問題。。。


最後做一個投票,看下客戶端工具的使用情況。



相關連結:


個人新書 《MySQL DBA工作筆記》



已同步到看一看



熱點新聞