複習電商筆記-21-linux版主從複製
主從複製Linux版本
配置主伺服器
編輯主master伺服器配置檔案/etc/my.cnf
在[mysqld]節點下加入兩句話
server-id=1
log-bin=mysql-bin #啟用二進位制日誌;
重啟服務:service mysql restart
登入mysql:mysql –uroot -proot
mysql>flush tables with read lock; #資料庫鎖表,不讓寫資料 mysql>show master status; #檢視MASTER狀態(這兩個值File和Position)
mysql>unlock tables; #從啟動好後,記得要解除鎖定
配置從伺服器
修改/etc/my.cnf增加一行
server-id=2
重啟服務
service mysql restart
通過mysql命令配置同步日誌的指向:
change master to master_host='192.168.170.43', master_port=3306, master_user='root',master_password='root', master_log_file='mysql-bin.000007', master_log_pos=609;
master_host 主伺服器的IP地址
master_port 主伺服器的PORT埠
master_log_file 和主伺服器show master status中的File欄位值相同
master_log_pos 和主伺服器show master status中的Position欄位值相同
啟動從服務
start slave; #stop slave;停止服務,出錯時先停止,再重新配置
show slave status\G; #檢視SLAVE狀態,\G結果縱向顯示。必須大寫
service mysql restart #重啟服務
注意:如果出錯,可以看後面的錯誤資訊。觀察Slave_SQL_Running_State欄位,它會記錄詳細的錯誤資訊。如果正常,上面兩個執行緒執行都應該是YES。這樣當主庫建立資料庫、建立表、插入資料時,從庫都會立刻同步,這樣就實現了主從複製。
擴充套件:同步日誌
binlog基本定義:二進位制日誌,記錄對資料發生或潛在發生更改的SQL語句,並以二進位制的形式儲存到磁碟中。
作用:可以用來檢視資料庫的變更歷史(具體的時間點所有的SQL操作)、資料庫增量備份和恢復(增量備份和局域時間點的恢復)、MySQL的複製(主主資料庫的複製、主從資料庫的複製)
二進位制日誌的資訊:
1)檔案位置:預設存放位置為資料庫檔案所在目錄下 /var/lib/mysql
2)檔案的命名方式:名稱為hostname-bin.xxxxx (重啟mysql一次將會自動生成一個新的binlog)
3)狀態的檢視
mysql> show variables like '%log_bin%';
儲存日誌的格式是二進位制不能直接檢視,必須藉助命令列工具才能閱讀。mysql自帶了mysqlbinlog工具,一般放置在mysql安裝目錄下的bin目錄下執行
mysqlbinlog mysql-bin.000001
後面那個引數是日誌檔案,日誌檔案一般放在mysql的資料庫儲存檔案目錄下,以配置檔案log-bin的值為檔名,一串000001這樣的數字為副檔名。
拓展:從庫只讀主從複製還可以進行嗎?
一主兩從
一主多從
這種方案好處是對主的影響最小,但缺點是越往後的同步的時間越久。
注意:這兩種方式的同步都會有時間差,在非常大的併發下,同步的時間差就會暴漏出來,導致可能查詢的資料讀到髒資料。
所以最終解決方案應該是分散式。
主從從鏈條
這種結構不行。第二個從配置為第一個從的子節點。目的是,主修改資料,從1資料隨主修改,從2資料隨從1修改。但實際中是實現不了的。現象為主修改,從1修改,從2不變。從1修改,從2才修改。
分散式資料庫系統的優點
降低費用。分散式資料庫在地理上可以式分佈的。其系統的結構符合這種分佈的要求。允許使用者在自己的本地錄用、查詢、維護等操作,實行區域性控制,降低通訊代價,避免集中式需要更高要求的硬體裝置。而且分散式資料庫在單臺機器上面資料量較少,其響應速度明顯提升。
提高系統整體可用性。避免了因為單臺數據庫的故障而造成全部癱瘓的後果。
易於擴充套件處理能力和系統規模。分散式資料庫系統的結構可以很容易地擴充套件系統,在分散式資料庫中增加一個新的節點,不影響現有系統的正常執行。這種方式比擴大集中式系統要靈活經濟。在集中式系統中擴大系統和系統升級,由於有硬體不相容和軟體改變困難等缺點,升級的代價常常是昂貴和不可行的。
微信開源PhxSQL
PhxSQL 是一個相容 MySQL、服務高可用、資料強一致的關係型資料庫叢集。
PhxSQL 以單 Master 多 Slave 方式部署,在叢集內超過一半機器存活的情況下,可自身實現自動 Master 切換,且保證資料一致性。PhxSQL 基於 Percona 5.6 開發。Percona 是 MySQL 的一個分支,功能和實現與 MySQL 基本一致。
配置步驟
1) 主從複製時,只需把從slave01複製一下即可,變成從slave02。無需修改server-id,無需修改auto.cnf。
2) 修改配置檔案
a)dbServer.xml
增加一個dbServer節點:
<dbServer name="slave02" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.19.41</property>
</factoryConfig>
</dbServer>
修改multiPool配置
注意:如果讓master也負責讀,就配置;如果master只負責寫就從這裡刪除。
b)amoeba.xml
如果只是一個從就直接寫從的名稱也可以
<property name="readPool">slave01</property>
如果要配置多個從,就必須寫multiPool。引用dbServer.xml中配置的這個節點名稱
<property name="readPool">multiPool</property>