MySQL 數據庫雙向鏡像、循環鏡像(復制)


在MySQL數據庫鏡像的貼子中,主數據庫A 的數據鏡像到從數據庫B,是單向的,Zen Cart網店的數據讀寫都必須在數據庫A進行,結果會自動鏡像到數據庫B中。但是對數據庫B的直接操作,不會影響數據庫A。
對於雙向數據庫鏡像,就是數據庫A的數據變化要鏡像到數據庫B中,同時數據庫B里的修改也要同時復制到數據庫A里。  

  對於循環數據庫鏡像,就是多個數據庫A、B、C、D等,對其中任一個數據庫的修改,都要同時鏡像到其它的數據庫里。 

應用:同一個Zen Cart網店的數據庫和程序,可以放置在不同的主機上,在任一台主機上新增的訂單、客戶資料,都會同時加入其它的主機數據庫里。 

  要實現雙向或循環數據庫鏡像,首先要解決的就是防止數據庫中自動遞增(AUTO_INCREMENT)字段的沖突,以免多數據庫各自生成一樣的增量值。 

  下面以三台主機循環鏡像為例,A是B的主鏡像,B是C的主鏡像,C是A的主鏡像。三台主機上MySQL設置文件 /etc /my.cnf 中分別加入下面的參數: 

# 主機一:美國主機 A, IP: 100.101.102.201 
[mysqld] 
server-id = 10 
log-bin = mysql-bin 
log-slave-updates 
replicate-same-server-id = 0 
auto_increment_increment = 10 
auto_increment_offset = 1 
master-host = 100.101.102.203 
master-user = repl_user 
master-password = repl_password 
report-host = 100.101.102.201 

# 主機二:中國主機 B, IP: 100.101.102.202 
[mysqld] 
server-id = 20 
log-bin = mysql-bin 
log-slave-updates 
replicate-same-server-id = 0 
auto_increment_increment = 10 
auto_increment_offset = 2 
master-host = 100.101.102.201 
master-user = repl_user 
master-password = repl_password 
report-host = 100.101.102.202 

# 主機三:本地主機 C, IP: 100.101.102.203 
[mysqld] 
server-id = 30 
log-bin = mysql-bin 
log-slave-updates 
replicate-same-server-id = 0 
auto_increment_increment = 10 
auto_increment_offset = 3 
master-host = 100.101.102.202 
master-user = repl_user 
master-password = repl_password 
report-host = 100.101.102.203 


簡單說明: 
server-id:數據庫標識,每個數據庫標識必須唯一; 
replicate-same-server-id:設置為0,防止數據循環更新; 
auto_increment_increment:這是循環鏡像里最重要的參數之一,表示自動增量為10,這將允許最多10台數據庫加入這個循環鏡像的陣列,而自動遞增字段不會重復。 
auto_increment_offset:這是循環鏡像里最重要的參數之一,表示偏移值,每個數據庫的偏移值必須唯一,且在1和auto_increment_increment之間。 
master-host:主數據庫服務器的IP; 
master-user:用於連接主數據庫的鏡像用戶名; 
master-password:用於連接主數據庫的鏡像密碼; 
report-host:提供給主數據庫用於反向連接的IP,因為主數據庫有時無法正確判斷從服務器的IP,所以這里最好填上從服務器自己的IP地址。 


另外,有時只需要鏡像某些數據庫,可以在 my.cnf 中加入: 
replicate-do-db = db_name1 
replicate-do-db = db_name2 
replicate-do-db = db_name3 

這樣就僅僅鏡像db_name1/db_name2/db_name3 


如果只是某些數據庫不要鏡像,可以在 my.cnf 中加入: 
replicate-ignore-db=db_name1 
replicate-ignore-db=db_name2 
replicate-ignore-db=db_name3 

這樣鏡像時就忽略 db_name1/db_name2/db_name3 這三個數據庫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM