Mysql雙主自增長衝突處理

2021-09-01 19:02:03 字數 877 閱讀 5070

多主互備和主從複製有一些區別,因為多主中都可以對伺服器有寫許可權,所以設計到自增長重複問題

出現的問題(多主自增長id重複)

1:首先我們通過a,b的test表結構

2:掉a,在b上對資料表test(存在自增長id)執行插入操作,返回插入id為1

3:後停掉b,在a上對資料表test(存在自增長id)執行插入操作,返回的插入id也是1

4:然後 我們同時啟動a,b,就會出現主鍵id重複

解決方法:

我們只要保證兩台伺服器上插入的自增長資料不同就可以了

如:a查奇數id,b插偶數id,當然如果伺服器多的話,你可以定義演算法,只要不同就可以了

在這裡我們在a,b上加入引數,以實現奇偶插入

a:my.cnf上加入引數

auto_increment_offset = 1

auto_increment_increment = 2

這樣a的auto_increment欄位產生的數值是:1, 3, 5, 7, …等奇數id了

b:my.cnf上加入引數

auto_increment_offset = 2

auto_increment_increment = 2

這樣b的auto_increment欄位產生的數值是:2, 4, 6, 8, …等偶數id了

可以看出,你的auto_increment欄位在不同的伺服器之間絕對不會重複,所以master-master結構就沒有任何問題了。當然,你還可以 使用3臺,4臺,或者n臺伺服器,只要保證auto_increment_increment = n 再設定一下auto_increment_offset為適當的初始值就可以了,那樣,我們的mysql可以同時有幾十台主伺服器,而不會出現自增長id 重複。

Mysql雙主自增長衝突處理

mysql雙主自增長衝突處理 多主互備和主從複製有一些區別,因為多主中都可以對伺服器有寫許可權,所以設計到自增長重複問題 出現的問題 多主自增長id重複 1 首先我們通過a,b的test表結構 2 掉a,在b上對資料表test 存在自增長id 執行插入操作,返回插入id為1 3 後停掉b,在a上對資...

mysql 去除列的自增長 mysql自增長列

自增長列必須是索引列,否則無法建立成功表,對myisma和innodb都一樣 localhost testdb root create table test5 id int auto increment,name varchar 10 engine innodb error 1075 42000 l...

MySQL雙主如何解決主鍵衝突問題

搭建了個雙主,突然想到如果表設定了自增主鍵的話,當業務同時向雙庫中插入一條資料,這時候情況是什麼樣子的呢?比如 主庫a和主庫b上的乙個表資料為 12 ninhao 當業務同時寫入資料後主庫a的資料是13 new nihao 那主庫b上的資料是什麼呢?主鍵也是13 建議類似雙主這種情況 事先設定好of...