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_increment
和auto_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
就好了。