1. 程式人生 > >mysql被動模式下的主主配置

mysql被動模式下的主主配置

主庫 strong .... pri bsp cat con 方法 防止

mysql 架構最簡單用得也最多的的是主從,主主等,主從有個切換的問題,從庫不可寫,在主庫一定的情況下,切換挺麻煩,這裏可以用主主模式。

但是主主也有個問題,就是兩邊同時寫有可能沖突,主鍵沖突,雖然可以用奇偶主鍵方式來解決,或者程序來做,但是增加了麻煩,這裏用被動模式下的主主就方便多了。

兩臺服務器設置

1.兩臺服務器都設置上二進制日誌和relay日誌:

#給服務器命名一個id

server_id=140

#聲明二進制日誌的文件為mysql-bin.xxx

log-bin=mysql-bin

#二進制日誌的格式:mixed/row/statement

binlog_format=mixed

#主主復制時都需要配置relay-log

relay-log=mysql-relay

2.都給對付賦權並設置對付對方為自己的主

20:GRANT replication slave ON *.* to ‘repl‘@‘10.0.67.19‘ identified by ‘123456‘;

19:change master to master_host=‘10.0.67.20‘, master_user=‘repl‘, master_password=‘123456‘,master_port=3306, master_log_file=‘mysql-bin.000004‘, master_log_pos=1318;

19:GRANT replication slave ON *.* to ‘repl‘@‘10.0.67.20‘ identified by ‘123456‘;

20:change master to master_host=‘10.0.67.19‘, master_user=‘repl‘, master_password=‘123456‘,master_port=3306, master_log_file=‘mysql-bin.000004‘, master_log_pos=1318;

3.開啟slave:

start slave

4.查看slave狀態

show slave status\G

被動模式下的主主復制:

1.概念:是指2臺服務器地位一樣,但其中一臺為只讀,並且業務中也只寫某1臺服務器;

2.好處:如果供寫入的服務器出了故障,能迅速的切換到從服務器,或者出於檢修等目的,把寫入功能切換到另一臺服務器也比較方便;

3.實現:在只讀服務器的my.cnf中加入如下配置:read-only=on;

同步沖突問題:

摘錄:

1.主主復制下一定要註意避免的問題,同步沖突,例:

create table stu (

id int primary key auto_increment.

)......

2臺mysql地位相等, 假如2個請求同時到達2臺服務器,請求的A節點stu的id為1,請求的B節點stu的id為1,此時就產生了同步沖突的問題;

2.解決方案:

讓A服務器的主鍵通過奇數增長,B服務器的主鍵通過偶數增長;

A服務器:

set global auto_increment_increment = 2; //每次自增步長

set global auto_increment_offset = 1; //初始自增的數字

set session auto_increment_increment = 2;

set session auto_increment_offset = 1;

B服務器:

set global auto_increment_increment = 2;

set global auto_increment_offset = 2;

set session auto_increment_increment=2;

set session auto_increment_offset = 2;

註:auto-increment-increment 和auto-increment-offset要寫到配置文件中,防止下次重啟後失效;

註:如果後期需要加服務器,這個辦法就有限制了

方法:我們可以在業務邏輯上來解決,比如在oracle有sequence序列,序列每次訪問生成遞增/遞減的數據,以redis為例,我們可以專門構建一個 global:userid,每次PHP插入Mysql前,先 incr->global:userid,得到一個不重復的userid;

mysql被動模式下的主主配置