windows下mysql的數據主主同步

  • 2022 年 9 月 27 日
  • 筆記

mysql主主備份:

保證各伺服器上的資料庫中的數據一致,因此需要開啟資料庫同步機制。由於是一整套系統,並且系統內含資料庫。由於任何一台伺服器都有可能被選中,因此要讓所有的資料庫上的數據都是最新的,任何一個伺服器上的數據發生變化時都要自動的同步到其他的伺服器上。

三維可視化管理系統使用的時Mysql資料庫,這裡採用的時主-主備份機制進行同步的。

主一資料庫:192.168.10.7

主二資料庫:192.168.10.212

主資料庫1:

編輯資料庫配置文件

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

圖片

主資料庫2:

編輯資料庫

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

圖片

配置完成後如果項目已經啟動則需要重啟,若沒有啟動項目此時啟動項目

創建mysql複製賬戶:

在主一資料庫操作:

為主二的所在的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;  //查看資料庫

圖片

互告bin-log資訊

登錄本地的mysql

主主同步還有主從同步都是基於binlog的原理進行,相當於我們打開了這個開關,每次操作資料庫都會產生一個binlog日誌,然後把binlog日誌進行發給對方進行執行,這樣數據就保持同步了

首先進入MySQL命令行:

圖片

在主資料庫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=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;

圖片

支援主資料庫一完成

在主資料庫2下操作:

圖片

這裡其實跟上面的主數庫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

這是修改前:

圖片

圖片

我們修改一個數據看另外的一個項目數據會不會改變

圖片

我們看下另外一個地址

圖片

同步成功