1. 程式人生 > >複習電商筆記-21-linux版主從複製

複習電商筆記-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>