MySQL中儲存程式、函數、觸發程式以及複製知識大全

來源:互聯網
上載者:User

  MySQL 5.1儲存程式和函數對複製起作用嗎?

  是的,在儲存程式和函數中被執行標準行為被從主MySQL伺服器複製到從伺服器。

  在主伺服器上建立的儲存程式和函數可以被複製到從伺服器上麼?

  是的,通過一般DDL語句執行的儲存程式和函數,其在主伺服器上的建立被複製到從伺服器,所以目標將存在兩個伺服器上。對儲存程式和函數的ALTER 和DROP語句也被複製。

  行為如何在已複製的儲存程式和函數裡發生?

  MySQL紀錄每個發生在儲存程式和函數裡的DML事件,並複製這些單獨的行為到從伺服器。執行儲存程式和函數的切實調用不被複製。

  對一起使用儲存程式,函數和複製有什麼特別的安全要求麼?

  是的,因為一個從伺服器有許可權來執行任何讀自主伺服器的二進位日誌的語句,指定的安全約束因與複製一起使用的儲存程式和函數而存在。如果複製或二進位日誌大體上是啟用的(為point-in-time恢複的目的),那麼MySQL DBA 有兩個安全選項可選:

  任何想建立儲存程式的使用者必須被賦予SUPER許可權。

  作為選擇,一個DBA可以設定log_bin_trust_routine_creators系統變數為1,它將會允許有標準CREATE ROUTINE許可權的人來建立一個儲存程式和函數。

  對複製儲存程式和函數的行為有什麼限制?

  嵌入到儲存程式中的不確定(隨機)或時基行不能適當地複製。隨機產生的結果,僅因其本性,是你可預測的和不能被確實複製的。因此,複製到從伺服器的隨機行為將不會鏡像那些產生在主伺服器上的。注意, 聲明儲存程式或函數為DETERMINISTIC或者在log_bin_trust_routine_creators中設定系統變數為0 將會允許隨即值操作被調用。

  此外,時基行為不能在從伺服器上重新產生,因為在儲存程式中通過對複製使用的二進位日誌來計時這樣的時基行為是不可重新產生的,因為該二進位日誌僅紀錄DML事件且不包括計時約束。

  最後,在大型DML行為(如大批插入)中非互動表發生錯誤,該非互動表可能經曆複製,在複製版的非互動表中主伺服器可以被部分地從DML行為更新。但是因為發生的那個錯誤,對從伺服器沒有更新。 對函數的DML行為,工作區將被用IGNORE關鍵詞來執行,以便於在主伺服器上導致錯誤的更新被忽略,並且不會導致錯誤的更新被複製到從伺服器。

        :更多精彩教程請關注三聯圖文教程 頻道,

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.