2010-07-11 75 views
2

我正在研究記錄對MySQL數據庫所做的所有更改(包括可能發生的DDL語句)並使用該信息以便與遠程數據庫同步的可能性。如何使用T-SQL獲取所有MySQL binlog事件信息

應用程序本身是用C#編寫的,所以目前爲止我所見過的最好的同步技術是Microsoft Sync Framework。該框架本身提出了一種解決方案,通過添加觸發器和附加表來存儲已刪除的行,從而跟蹤對數據庫所做的更改。

對我來說這似乎不是一個好主意,因爲它涉及到改變4個以上產品使用的標準數據庫的模式。這種方法也有效地加倍了表的數量(通過爲每個表的刪除行添加一個新表),這也感覺不太好。

另一方面,MySQL有很棒的事情binlog,它可以跟蹤所有的變化,並且在大多數情況下也可以使用所謂的混合模式來跟蹤語句(這樣它們可以在遠程數據庫上再次執行以複製數據)以及調用非確定性函數時的原始數據(如NOW()),因此更新的數據在兩個地方都是相同的。

而且似乎有2點標準的方式來獲取這些數據: 1)mysqlbinlog工具 2)調用「SHOW BINLOG事件」

選項2似乎對我的好,因爲它不需要調用另一個外部應用程序以及在數據庫機器上運行應用程序,但它不包括記錄的ROW格式語句的實際數據(只有像table_id:47個標記:STMT_END_F,它告訴我什麼)。

所以最後我的問題是:

  1. 是否有更好的方法來追蹤不改變整個結構並增加一噸的觸發器和表到MySQL數據庫所做的更改?我可以改變產品來記錄它的變化,但是我們必須使用這個數據庫來更改所有的產品,以確保我們記錄了所有內容...並且我認爲幾乎不可能說服每個人。

  2. 我可以獲得有關使用SHOW BINLOG EVENTS所做更改的所有信息嗎?包括ROW數據。

P.S.我也研究過MySQL Proxy,但是在所有情況下記錄語句的問題是不包括非確定性函數中的實際數據。

回答

0

選項3將從您的應用程序中自己解析bin日誌 - 這樣您可以完全控制您檢查等等的頻率,並且您可以看到所有使用實際值的語句。

+0

是的這是一個選項,但問題是MySQL有二進制日誌文件的幾個版本,並且他們不斷地改變它... 選項4可能是最好的。在MySQL 5.5中,有所謂的半同步複製,它表明事務提交時的從站。編寫一個應用程序可以模仿一個奴隸並等待整個交易的消息。不幸的是,5.5通常不可用,並且這個選項仍然可用於Linux,這不是那麼好:(。 – flipm0de 2010-07-14 22:06:13