天天看點

mysql雙主複制模式_mysql複制模式第二部分-----雙主模式

雙主配置

我在配置主從伺服器時,使用了兩台伺服器:10.19.34.126和10.19.34.91。

1、首先需要在這兩台上搭建單獨的mysql服務masterA和masterB。

2、配置資料庫masterA,要對每一個資料庫服務配置唯一标示,參數名為server-id,也可以通過ip來指定。修改my.conf檔案參數:

log-bin= mysql-bin #所有的資料操作寫入二進制日志,便于将sql語句同步到中繼日志

auto-increment-offset=1 #自增長字段從那個數開始,他的取值範圍是1 .. 65535

auto-increment-increment=2 #自增長字段每次遞增的量,其預設值是1,取值範圍是1 .. 65535

log_slave_updates=1 #該參數用來設定将中繼日志中的操作傳入二進制日志,以便于該從資料庫作為其他執行個體的主庫。

replay_log=mysql-replay-bin #用來存儲中繼日志

server-id=1

在主主同步配置時,需要将兩台伺服器的auto_increment_increment增長量都配置為2,而要把auto_increment_offset分别配置為1和2。這樣才可以避免兩台伺服器同時做更新時自增長字段的值之間發生沖突。

3、配置資料庫masterA,要對每一個資料庫服務配置唯一标示,參數名為server-id,也可以通過ip來指定。修改my.conf檔案參數:

log-bin= mysql-bin #所有的資料操作寫入二進制日志,便于将sql語句同步到中繼日志

auto-increment-offset=2 #自增長字段從那個數開始,他的取值範圍是1 .. 65535

auto-increment-increment=2 #自增長字段每次遞增的量,其預設值是1,取值範圍是1 .. 65535

log_slave_updates=1 #該參數用來設定将中繼日志中的操作傳入二進制日志,以便于該從資料庫作為其他執行個體的主庫。

replay_log=mysql-replay-bin #用來存儲中繼日志

server-id=2

4、在masterA資料庫上建立賬号,通過這個賬号進行同步主庫的二進制日志到備庫的中繼日志。

MySQL>grant all on *.* to 'root'@'%' identified by '123456'

5、在masterB資料庫上建立賬号,通過這個賬号進行同步主庫的二進制日志到備庫的中繼日志。

MySQL>grant all on *.* to 'root'@'%' identified by '123456'

6、在masterA伺服器上檢視目前二進制日志名和偏移量值:

MySQL> show master status;

mysql雙主複制模式_mysql複制模式第二部分-----雙主模式

7、在masterB伺服器上首先停止複制服務,然後設定從伺服器的同步點,最後開啟同步服務:

MySQL> stop slave;

MySQL> CHANGE MASTER TO MASTER_HOST="10.19.34.126",MASTER_USER="root",MASTER_PASSWORD="123456",MASTER_PORT=3306,MASTER_LOG_FILE="mysql-bin.000003",MASTER_LOG_POS=393044781,MASTER_CONNECT_RETRY=10;

MySQL> start slave;

8、在masterB伺服器上檢視目前二進制日志名和偏移量值:

MySQL> show master status;

mysql雙主複制模式_mysql複制模式第二部分-----雙主模式

9、在masterA伺服器上首先停止複制服務,然後設定從伺服器的同步點,最後開啟同步服務:

MySQL> stop slave;

MySQL> CHANGE MASTER TO MASTER_HOST="10.19.34.91",MASTER_USER="root",MASTER_PASSWORD="123456",MASTER_PORT=3306,MASTER_LOG_FILE=" mysql-bin.000004",MASTER_LOG_POS=393044425 ,MASTER_CONNECT_RETRY=10;

MySQL> start slave;

雙主的部分詳解

在配置雙主時,可能有人會想到在将主資料庫A的資料操作同步到主資料庫B的中繼器,由于開啟了log_slave_updates參數,主資料庫B從主資料庫A同步的語句從中繼日志轉儲到二進制日志中。由于是雙向複制是否會出現該語句又同步到了資料庫A中,答案是不可能的,因為在二進制日志中會标示該條語句是來自哪個資料庫執行個體,如果标示資料庫A,則不會循環同步到資料庫A。如果該資料庫的搭模組化式隻是雙主模式,沒有改屬豬模式的從資料庫,可以将log_slave_updates參數關閉,所有的同步複制不會轉儲到二進制日志,也避免了循環複制。

應有備庫的雙主模式

1、對雙主模式中的兩個資料庫配置檔案中添加配置參數:log_slave_updates=1。

2、檢視masterA和masterB的二進制日志的檔案和同步點。

3、在masterA和masterB的兩個備庫上都要執行以下指令,實作資料同步:

MySQL> stop slave;

MySQL> CHANGE MASTER TO MASTER_HOST="10.19.34.91",MASTER_USER="root",MASTER_PASSWORD="123456",MASTER_PORT=3306,MASTER_LOG_FILE=" mysql-bin.000004",MASTER_LOG_POS=393044425 ,MASTER_CONNECT_RETRY=10;

MySQL> start slave;

雙主實作自動切換