mysql replication多源服務器下的auto_increment衝突問題

   在以前的文章中《mysql同步複製M-M(master master)模式》 裏,配置了這樣一種雙向同步機制,兩臺服務器都可以保持同步並且都可以讀寫,但是這種配置方案還不完善,生產上實際可能出現很多問題,最突出的一點就是庫中某些表有自增長auto_increment字段的時候,容易產生鍵值衝突錯誤!

      熟讀過mysql的replication的docs,我們發現mysql其實對這個主鍵衝突已經有相應的解決方案,只是互聯網很多配置過程都沒有加進去這點,直接拿來用,出問題的概率是比較大的。
       
      mysql的服務器變量auto_increment_increment【增長值】和auto_increment_offset【偏移量】可以協調多主服務器複製和AUTO_INCREMENT列。並且每個變量有一個默認的(並且是最小的)值1,有一個最大值65,535。把這些變量設置爲非衝突的值,例如在同一個表插入新行時,多主服務器配置主的服務器就不會發生AUTO_INCREMENT值衝突,這裏就可以解決這個問題,比如就這裏的兩臺服務器A和B爲例:
在A的[mysqld]字段下增加:

auto-increment-increment = 2
auto-increment-offset = 1


在B的[mysqld]字段下增加:

auto-increment-increment = 2
auto-increment-offset = 2


         這樣,兩臺服務器同時有數據插入到有auto_increment的字段是,就不會發生衝突,一個簡單的例子就是A下插入的ID爲1,3,5,7……,以此類推,B下插入的ID就爲2,4,6,8,……,以此類推,但即使這樣,mysql建議也不要使用這種雙向同步機制,主要的原因是目前的同步還不支持在多源服務器上同步更新鎖協議,從而無法保證數據庫數據操作的“原子性”問題。那麼本文就算對上篇mysql複製文章的補充。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章