保證各伺服器上的資料庫中的資料一致,因此需要開啟資料庫同步機制。由於是一整套系統,並且系統內含資料庫。由於任何一臺伺服器都有可能被選中,因此要讓所有的資料庫上的資料都是最新的,任何一個伺服器上的資料發生變化時都要自動的同步到其他的伺服器上。
系統使用的時Mysql資料庫,這裡採用的時主-主備份機制進行同步的。
主一資料庫:192.168.10.7
主二資料庫:192.168.10.212
編輯資料庫組態檔
3DDataCenter\64\mysql\my.ini
# 開啟二進位制同步
log-bin=mysql-bin
# 設定ID,不能重複,可以使用IP最後一位數位
server-id=129
# 需要同步的資料名稱,多個資料庫則要重複設定: bin-do-db,bin-ignore-db為互斥關係, 只需設定其中一項即可
replicate-do-db=itv
# 自增長欄位初始值為1
auto-increment-offset=2
# 自增長欄位增量值
auto-increment-increment=2
# 跳過所有複製的錯誤
slave-skip-errors=all
編輯資料庫
3DDataCenter\64\mysql\my.ini
# 開啟二進位制同步
log-bin=mysql-bin
# 設定ID,不能重複,可以使用IP最後一位數位
server-id=128
# 需要同步的資料名稱,多個資料庫則要重複設定: bin-do-db,bin-ignore-db為互斥關係, 只需設定其中一項即可
replicate-do-db=itv
# 自增長欄位初始值為1
auto-increment-offset=1
# 自增長欄位增量值
auto-increment-increment=2
# 跳過所有複製的錯誤
slave-skip-errors=all
設定完成後如果專案已經啟動則需要重啟,若沒有啟動專案此時啟動專案
為主二的所在的ip建立一個賬號密碼為root1,這樣就能夠允許遠端存取本機資料庫了
在 3DDataCenter\64\mysql\bin 位址列上面輸入cmd
登入mysql:
mysql -uroot -p -P3333 //登入mysql
use mysql;
grant replication slave on *.* to root1@'192.168.10.212' identified by 'root1';
賦予許可權:如果就這樣連線的話雖然能存取但還是看不了資料的,所以需要賦予root1許可權
GRANT ALL PRIVILEGES ON *.* TO 'root1'@'192.168.10.212' IDENTIFIED BY 'root1' WITH GRANT OPTION;
flush privileges;
為主二的所在的ip建立一個賬號密碼為root1,這樣就能夠允許遠端存取本機資料庫了
在 3DDataCenter\64\mysql\bin 位址列上面輸入cmd
登入mysql:
mysql -uroot -p -P3333 //登入mysql
use mysql;
grant replication slave on *.* to root1@'192.168.10.7' identified by 'root1';
GRANT ALL PRIVILEGES ON *.* TO 'root1'@'192.168.10.7' IDENTIFIED BY 'root1' WITH GRANT OPTION;
flush privileges;
在主一登入主二的資料庫:
mysql -h192.168.10.212 -uroot1 -p -P3333 //登入主二的資料庫
繼續連線,發現可以連線成功,並且可以檢視資料
show databases; //檢視資料庫
同理,在主二的資料庫可以存取主一的資料庫看下:
mysql -h192.168.10.7 -uroot1 -p -P3333 //登入主一的資料庫
show databases; //檢視資料庫
登入原生的mysql
主主同步還有主從同步都是基於binlog的原理進行,相當於我們開啟了這個開關,每次運算元據庫都會產生一個binlog紀錄檔,然後把binlog紀錄檔進行發給對方進行執行,這樣資料就保持同步了
首先進入MySQL命令列:
檢視紀錄檔: show master status;
設定同步:
change master to master_host = '192.168.10.212',master_user='root1',master_password='root1',master_port=3333,master_log_file='mysql-bin.000001',master_log_pos=47007;
備註: master_log_file與File值一致, master_log_pos與Position值一致
開始同步: start slave;
檢視同步情況:
show slave status\G;
當看到了兩個yes,即:Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果是兩個yes就說明已經成功
說明已經設定成功了,但是這裡有一個顯示為no,明顯有問題
解決辦法:
stop slave;
reset slave;
start slave;
然後我們繼續檢視同步情況;
show slave status\G;
發現還是報錯,只是報錯的內容不一樣
繼續輸入
reset master;
show master status\G;
stop slave; //這裡可能需要等待一會兒
change master to master_host = '192.168.10.212',master_user='root1',master_password='root1',master_port=3333,master_log_file='mysql-bin.000001',master_log_pos=106;
start slave;
show slave status\G;
支援主資料庫一完成
這裡其實跟上面的主數庫1是一樣的操作
show master status;
change master to master_host = '192.168.10.212',master_user='root1',master_password='root1',master_port=3333,master_log_file='mysql-bin.000001',master_log_pos=695;
備註: master_log_file與File值一致, master_log_pos與Position值一致
開始同步:
start slave;
檢視同步情況:
show slave status\G;
如果碰到問題可以根據上面的出現報錯的情況處理
我們存取192.168.10.7
這是修改前:
我們修改一個資料看另外的一個專案資料會不會改變
我們看下另外一個地址
同步成功