1. 程式人生 > >mysql資料庫主主同步

mysql資料庫主主同步

3臺伺服器的多主架構,3臺伺服器都可以寫入並且做到3臺伺服器的資料一致性(任意一臺伺服器做寫入操作都可以,並且每臺伺服器的資料做到完全一致),並且防止主鍵衝突.目前只有3臺MySQL伺服器,不使用生成唯一id的程式。

在3臺主伺服器上建立mysql使用者建立使用者(使用root也可以,但是不建議) , 該使用者必須有 REPLICATION SLAVE 許可權
建立使用者:CREATE USER ‘cong’@‘192.168.43.%’ IDENTIFIED WITH mysql_native_password by ‘123456’;
賦權:GRANT REPLICATION SLAVE ON . TO ‘cong’@‘192.168.43.%’;
重新整理許可權:flush privileges;
在從伺服器上測試使用主伺服器剛剛建立的賬號是否能夠正常連線 例如
/usr/local/mysql/bin/mysql -ucong -p123456 -h192.168.43.210

停止主、從伺服器的mysql服務
例如 /etc/init.d/mysql stop

主伺服器必須開啟開二進位制日誌 例如 vi /etc/my.cnf (根據實際路徑)
主要是修改配置檔案 , 一般在 linux 下安裝的 mysql 配置檔案是 my.cnf, 在
windwos 下是 my.ini,
修改主伺服器配置檔案vi /etc/my.cnf:
1.MySQL的生成二進位制日誌時會記錄server-id值,因此在通過二進位制日誌同步時不會產生無限迴圈同步的問題。
2.防止主鍵衝突可以通過調整MySQL自增主鍵的步長和初始值來解決.例如配置檔案可做如下更改。
auto_increment_increment= 3或者其他值 如果設定為2自增時每次+3
auto_increment_offset= 2或者其他值 偏移量 也就是預設從哪個值開始自增
3.mysql作為從伺服器同步資料時如果也需要記錄到二進位制日誌中,可以通過引數log-slave-updates= on來設定。

每臺主機的 server-id與偏移量不同,而且每臺的uuid也不同。
** uuid在auto.cnf中修改: vi /usr/local/mysql/var/auto.cnf
假設這三臺伺服器ip分別為: 192.168.43.210 192.168.43.211 192.168.43.212
則192.168.43.210的my.cnf配置為:
 

server-id=1
auto_increment_increment= 3
auto_increment_offset= 1
log-slave-updates= on

211,212修改server-id與auto_increment_offset,使三臺伺服器不同。

log-bin= 二進位制檔案的位置 # 主伺服器需開啟二進位制日誌 可以是預設值也 可以建立新目錄並且賦予可寫許可權
例如log-bin=/usr/local/mysql/binlog/bin-log
預設日誌檔案在mysql安裝目錄下的var目錄下
binlog-do-db=mydata # 需要同步的資料庫 預設都同步
#binlog-ignore-db= # 需要忽略的資料庫 預設不忽略任何資料庫
啟動mysql服務 /etc/init.d/mysql start
如果使用了預設的二進位制日誌配置 需要將原始日誌檔案刪除後再啟動mysql服務,(cd /usr/local/mysql/var)啟動後可以檢視二進位制日誌目錄下是否生成新檔案,如果已經生成日誌檔案說明配置是正確的。

啟動mysql服務 /etc/init.d/mysql start
進入mysql命令 行執行命令
1. change master to master_host=’ 主 服務 器 地 址 ‘, master_user=’ 用 戶名 ‘,
master_password=’ 密碼 ',
master_port= 埠號 ,MASTER_CONNECT_RETRY=10;
例如在192.168.43.210上執行 :

change master to master_host='192.168.43.211',master_user='cong',master_password='123456',master_port=3306,master_connect_retry=10;

192.168.43.211上執行 :

change master to master_host='192.168.43.212',master_user='cong',master_password='123456',master_port=3306,master_connect_retry=10;

192.168.43.212上執行 :

change master to master_host='192.168.43.210',master_user='cong',master_password='123456',master_port=3306,master_connect_retry=10;

2. 再執行

start slave;

3. 在從伺服器輸入命令

show slave status\G;

檢視狀態 :

Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.16.6
Master_User: slave
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: binlog.000002
Read_Master_Log_Pos: 903
Relay_Log_File: relaylog.000004

顯示:Slave_IO_State: Waiting for master to send event 連線成功。
在主伺服器上建立資料庫資料表後檢視從伺服器 , 看是否配置成功。
撤銷配置 :
進入命令列執行 stop slave; 再執行 reset slave; 即可 .