程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> trigger、procedure和event如何同步

trigger、procedure和event如何同步

編輯:MySQL綜合教程

最近遇到一個需求涉及存儲過程,被突然問題到如何同步問題問到了,趕緊補課學習一下。

 

首先,先看一下trigger、procedure和event的定義都是什麼?

trigger: 觸發器是一個被指定關聯到一個表的數據對象,當對個表的特別事件出現時,它被激活。

procedure:是一組為了完成特定功能的SQL語句集。

event:定時任務,類似Linux的crontab。

 

其次,mysql的同步中可以設定不同的binlog_format,包括statment、row和mix。

statment:語句級,記錄原始SQL語句。

row:行級,記錄受到影響的行的真實修改情況。

mix:上面兩種的混合,基礎使用語句級,當會導致數據不一致的時候會采用行格式。

 

最後,分別在statement和row兩種格式下,看看trigger、procedure和event是如何記錄binlog的。

1、statement+trigger

  binlog會把create trigger記錄下來,並推給slave,然後記錄正常的sql語句,不會記錄trigger中的任何sql。

2、row+trigger

  binlog會把create trigger記錄下來,然後會將正常的sql和trigger的sql的所有執行結果記錄下來,並推送給slave。

3、statement+procedure

  binlog中會把create procedure記錄下來,然後不會記錄call語句,而是將procedu中的sql用語句級記錄下來,推送給slave。

4、row+procedure

  binlog會將create procedure記錄下來,然後不會記錄call procedure,而是會把所有執行的記過記錄在binlog中,然後推送給slave。

5、statement+event

  binlog會將create event記錄下來,並會將event中的操作記錄成語句級,推送給slave。

6、row+event

  binlog會將create event記錄下來,並將event中的所有操作按照行格式記錄下來,推送給slave。

 

這期間的問題:

1、由於create都是語句級的,從庫會自動更改binlog_format。

2、從庫如果binlog_format是statement但是主庫是row的話,同步會報錯,需要將從庫也改成row才會恢復。

 

以上這2點很容易造成同步中斷,故不建議在mysql中使用以上3種設置,如果要用最好使用statement格式。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved