1. 程式人生 > >mysql資料庫的主從複製和主主複製實踐

mysql資料庫的主從複製和主主複製實踐

準備:

  • 兩臺裝上phpstudy整合環境的計算機(過程忽略)
  • 固定兩臺電腦的ip(因為mysql資料庫是通過ip進行連線,自動獲取ip會導致下次重啟電腦時,連線就會失效)

步驟1:找到網路連線資訊
這裡寫圖片描述
步驟2:建立文字檔案,將連線資訊記錄下來
這裡寫圖片描述
步驟3:將文字記錄資訊複製到ipv4屬性裡面
這裡寫圖片描述
步驟4:檢視詳細資訊,配置成功
這裡寫圖片描述

擴充套件:

DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個區域網的網路協議,使用UDP協議工作, 主要有兩個用途:給內部網路或網路服務供應商自動分配IP地址,給使用者或者內部網路管理員作為對所有計算機作中央管理的手段,在RFC 2131中有詳細的描述。

主從複製:

理解:

這裡寫圖片描述

配置主資料庫伺服器

找到主資料庫的配置檔案my.cnf(或者my.ini),我的在/etc/mysql/my.cnf,在[mysqld]部分插入如下兩行:

log-bin=mysql-bin #開啟二進位制日誌
server-id=1 #設定server-id

這裡寫圖片描述

在其中一臺計算機上進入mysql命令介面

這裡寫圖片描述

建立用於從伺服器連線的使用者賬號並授權

CREATE USER 'user1'@'192.168.1.101' IDENTIFIED BY 'user1';#建立使用者
GRANT REPLICATION SLAVE ON
*.* TO 'user1'@'192.168.1.101';
#分配許可權 flush privileges; #重新整理許可權

這裡寫圖片描述

檢視master狀態,記錄二進位制檔名和位置

SHOW master STATUS;

這裡寫圖片描述

配置從資料庫伺服器

找到從資料庫的配置檔案my.cnf(或者my.ini),插入唯一服務id:

server-id=2 #設定server-id,必須與其他伺服器不一樣

.開啟mysql會話,執行以下SQL語句

CHANGE MASTER TO
MASTER_HOST='192.168.1.101',#主資料庫伺服器ip
MASTER_USER='user1'
,#訪問主資料庫伺服器的使用者名稱 MASTER_PASSWORD='user1',#訪問主資料庫伺服器的密碼 MASTER_LOG_FILE='mysql-bin.000002',#主資料庫伺服器開啟的二進位制檔名 MASTER_LOG_POS=73;#主資料庫伺服器開啟的二進位制檔名的位置

啟動slave同步master

start slave;

檢視slave狀態

show slave status\G;

這裡寫圖片描述

主主複製

就是按照主從複製的步驟,將原來的從資料庫伺服器當做主資料庫伺服器配置,同理,原來的主資料庫伺服器當做從資料庫伺服器配置,這樣就可以實現無論哪個伺服器插入資料,其他主伺服器都能實現資料同步

  • 注意:在配置的時候我們需要注意一些問題,例如,主鍵重複,server-id不能重複等等。

關於主主的配置

server-id=11   #任意自然數n,只要保證兩臺MySQL主機不重複就可以了。
log-bin=mysql-bin   #開啟二進位制日誌
auto_increment_increment=2   #步進值auto_imcrement。一般有n臺主MySQL就填n
auto_increment_offset=1   #起始值。一般填第n臺主MySQL。例如此時為第一臺主MySQL
binlog-ignore=mysql   #忽略mysql庫(可寫可不寫)
binlog-ignore=information_schema   #忽略information_schema庫(可寫可不寫)
replicate-do-db=aa   #要同步的資料庫,預設所有庫

注意事項

  • 主主複製配置檔案中auto_increment_incrementauto_increment_offset只能保證主鍵不重複,卻不能保證主鍵有序。
  • 當配置完成Slave_IO_Running、Slave_SQL_Running不全為YES時,show slave status\G資訊中有錯誤提示,可根據錯誤提示進行更正。
  • Slave_IO_Running、Slave_SQL_Running不全為YES時,大多數問題都是資料不統一導致。

    常見出錯點:

    1、兩臺資料庫都存在db資料庫,而第一臺MySQL db中有tab1,第二臺MySQL db中沒有tab1,那肯定不能成功。

    2、已經獲取了資料的二進位制日誌名和位置,又進行了資料操作,導致POS發生變更。在配置CHANGE MASTER時還是用到之前的POS

    3、stop slave後,資料變更,再start slave。出錯。

    終極更正法:重新執行一遍CHANGE MASTER就好了。