mysql雙機master測試

2021-09-01 22:16:54 字數 3204 閱讀 3580

測試環境

寫道伺服器a:192.168.0.219

伺服器b:192.168.0.8

a,b已設定為互為主從備份,測試資料庫為test-xf

現test-xf庫有資料表tb_mobile

測試一:停掉某台mysql服務

a:sudo /etc/init.d/mysql stop

xiaofei@xiaofei-desktop:~$ sudo /etc/init.d/mysql stop

[sudo] password for xiaofei:

shutting down mysql

.. *

我停掉a伺服器的mysql服務.

接著我向b伺服器的tb_mobile表中插入新資料,然後再開啟a伺服器看狀態如何.

b庫中tb_mobile表現在如圖b_old,插入一條88888888的資料之如b_new

現在a伺服器是mysql的服務是停止的.如a_old

我們重新啟動a伺服器的mysql服務;

xiaofei@xiaofei-desktop:~$ sudo /etc/init.d/mysql start

starting mysql

.. *

我們再進a伺服器的test-xf庫下的tb_mobile表中看看.如圖:a_new

我們發現a伺服器的資料已經自動同步了.同樣,我停掉b的mysql服務後,往a插入資料,恢復b後,資料也已經自動同步了.

測試二:斷網測試同時為測試表加上乙個id的自增欄位

寫道有種預感,有了自增變數後,在雙方不通的情況下,雙方都有增加資料,恢復通訊後同步會出現問題.

我在斷開本機網路之後.先在a(本機)插入一條資料,id=19

去到另一台機開啟b檢視此時還沒有同步,我再b上插入一條資料,id就=20了,

這時放開網路後,二邊都同步了,至於為什麼b的自增id已20開始,肯定是某些設定引數的原因.

剛才是插入奇數條資料(1條)測試,接著我插入偶數(2條)來測試一下.

斷網之後,我先在b上插入二條資料,id=22,id=24

隨後我去a上插入二條資料,id=21,id=23.

通訊之後,二邊同步成功.

查詢原因:

多次插入資料後發現.a自增id是奇數,step=1,b自增id是偶數,step=1.

比如:現在a,b二邊資料一樣,最大id=26.你在a插入一條資料後,id=27,再插入一條,id=29,以此類推...

當id=29後,你去b中插入資料,id=30,再插入id=32,以此類推....

是這麼二個引數對自增字段起的作用..

a:auto_increment_offset = 1

auto_increment_increment = 2

b:auto_increment_offset = 2

auto_increment_increment = 2

auto_increment_offset和auto_increment_increment

auto_increment_increment和auto_increment_offset用於主-主伺服器(master-to-master)複製,並可以用來控制auto_increment列的操作。兩個變數均可以設定為全域性或區域性變數,並且假定每個值都可以為1到65,535之間的整數值。將其中乙個變數設定為0會使該變數為1。

這兩個變數影響auto_increment列的方式:auto_increment_increment控制列中的值的增量值,auto_increment_offset確定auto_increment列值的起點。

如果auto_increment_offset的值大於auto_increment_increment的值,則auto_increment_offset的值被忽略。例如:表內已有一些資料,就會用現在已有的最大的自增值做為初始值。

假如我們現在有四台機器那設定應該如下:

a:auto_increment_offset = 1

auto_increment_increment = 4

b:auto_increment_offset = 2

auto_increment_increment = 4

c:auto_increment_offset = 3

auto_increment_increment = 4

d:auto_increment_offset = 4

auto_increment_increment = 4

但是這樣設定的話那id不是跳得很厲害 :)

測試三:當一台機器當掉後,另一台機器能否接任

寫道當掉a機,繼續向a機寫資料,會是什麼情況?b機會不會接管,資料會不會寫到b機?

**結果是不會,當掉一台機後,你繼續往它寫資料,只能是提示你不能連線.資料也無法寫入.

寫道關於mysql-ha,目前有多種解決方案,比如heartbeat、drbd、mmm、共享儲存,但是它們各有優缺點。

heartbeat、drbd配置較為複雜,需要自己寫指令碼才能實現mysql自動切換,對於不會指令碼語言的人來說,這無疑是一種腦裂問題;

對於mmm,生產環境中很少有人用,且mmm 管理端需要單獨執行一台伺服器上,要是想實現高可用,就得對mmm管理端做ha,這樣無疑又增加了硬體開支;

對於共享儲存,個人覺得mysql資料還是放在本地較為安全,儲存裝置畢竟存在單點隱患。

使用mysql雙master+keepalived是一種非常好的解決方案,在mysql-ha環境中,mysql互為主從關係,這樣就保證了兩台mysql資料的一致性,

然後用keepalived實現虛擬ip,通過keepalived自帶的服務監控功能來實現mysql故障時自動切換。

參考: 

mySQL雙機冗餘 MySQL雙機熱備實現原理

雙機熱備是應用於伺服器的一種解決方案,其構造思想是主機和從機通過tcp ip網路連線,正常情況下主機處於工作狀態,從機處於監視狀態,一旦從機發現主機異常,從機將會在很短的時間之內代替主機,完全實現主機的功能。mysql資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的資料同時寫到備份的資料庫...

MYSQL雙機熱備體會

1 mysql 雙機熱備的主要目的是利用從伺服器的資料庫主動去訪問主伺服器的資料庫進行資料備份,可以設定僅允許從伺服器的 ip可以訪問並備份主伺服器資料庫,提供安全性 2 兩台伺服器最好使用同個版本的資料庫,避免出現版本不一致問題 3 一般資料庫伺服器都備份在本機,但是如果伺服器硬碟損壞資料丟失,或...

mysql雙機雙向熱備

因為是雙向備份,所以配置中很多操作是重複的,只是主從順序不一致,乙個正向乙個反向。到這裡已經實現了雙向備份,現在可以在兩個庫中分別做一些操作看看效果。目前只配置了db1以及其備份的雙向主從,也就是僅保證了乙個mt5使用教程www.gendan5.com mt5.htmlschema的熱備,而實際應用...