先編輯master配置:
vim /etc/my.cnf
(加上紅框部分。#server id部分:每個都有獨一無二的id作為區分,這id可以用服務器ip后三位。#binary log:日志。#statement row mixed:三種監聽方式)
其中三種情況:監聽語句變化,還是磁盤變化,還是混合模式?
然后編輯slave的/etc/my.cnf:
(設置id,建立中繼日志)
然后分別啟動主和從:service mysqld start
接下來,主和從要建立聯系:
登錄mysql:?
mysql -uroot -p
master建立授權帳號(這個帳號允許你復制master的二進制日志。一個replication client帳號,一個replication slave帳號):
(授權一個客戶端帳號、一個從帳號。*.*:作用于所有庫和表上,不像mongodb能單選某庫某表。to 帳號repl,指定它發揮作用的ip:@192.168.%.%,即前綴是192.168都可以用。identitied by 'repl':指定密碼為repl)
到目前為止,主服務器的日志、帳號、從服務器的relaylog好了,只需要通知從服務器連過來:
(master_log_file是當前master所用的二進制文件。master_log_pos是當前master的position。下面有查看方法)
見識下二進制日志:
目前用的最新的二進制日志是:
(mater機器)
看看當前master機器的狀態:
(確實當前用的是mysql-bin.000003,position 278的意思是:我主服務器已經寫到278位置了,你從服務器注意哈)
操作slave:
(reset slave:重置slave。然后設置對應master的相關信息)
查看slave的情況:show slave status \G
啟動slave:
再查看狀態就好了(第一行變成了waiting? for master to send event):
接下來,不管在master是新建庫、表,各種增刪改查,在slave中都會看到相應的變化
典型問題:
有一業務場景,經過測試,讀寫比為1:20,請根據讀寫比,合理設置優化方案.
?
讀寫比:
寫數據/讀數據的比例,
Insert/update/delelte ????/ ?select
?
不管具體技術,從"讀寫分離"的概念出發來推導一下基本的要素.
通俗的說:讀服務器就是指寫服務器的數據鏡像.
?
從服務端看:要有N臺從服務器和主服務器保持數據一致.
從客戶端看:比如有一條insert語句和一條select 語句,
則要區分讀/寫語句,并且分別請求從/主服務器.
?
?
服務器端讀寫分離的具體技術
1:數據庫集群技術
集群由3個概念
1:sql節點 ?sql node
2:數據節點 data node
3:管理節點 ndb managerment
?
Sql語句發送"1sql節點", "1sql"節點發往"2數據節點",再由3管理節點完成數據節點的之間的同步.
?
集群技術相對復雜,至少有3種節點,4臺服務器才能完成.
?
?
2:數據庫復制 replication
數據庫復制 replication 的實現原理
1:主服務器凡運行語句,都產生一個二進制日志 binlog
2:從服務器不斷讀取主服務器的binlog
3:從主服務讀取到的binlog,轉換為自身可執行的relaylog,
4:執行relaylog
?
?
實現步驟:
1:首先確保主服務器打開二進制日志功能.
這樣,主服務器一旦有數據變化,立即產生二進制日志.
?
2:從服務器也需要開啟二進制日志和relay日志功能.
這樣可以從主服務器讀取binlog,并產生relaylog
?
3:在主服務器建立一個從服務器的賬號,并授予數得上權限.
?
4: 指定從服務對應的主服務器,開啟從服務器.
?
?
具體實施
本人虛擬機下有兩臺linux,IP為199 200
1: 200做從服務器
2: 199mysql,做為主服務器.
3: 保證主從3306端口互通.
4: 配置主服務器,打開binlog
#給服務器起一個唯一的id
server-id=1
?#開啟二進制日志
log-bin=mysql-bin
#指定日志格式
binlog-format=mixd/row/statement
重啟mysql
已經能夠充當master服務器
5: 配置從服務器打開binlog和relaylog
重啟從服務器
?
6: 在主服務器上創建相應的復制賬號
7: 在從服務器通過語句指定要復制的主服務器(注意,可以一主多從,不可一從多主).
8:啟動從服務器功能
->start slave;
8: 測試.
?
?
常用語句:
show master status ; 查看master的狀態, 尤其是當前的日志及位置
show slave stattus; 查看slave的狀態.
reset slave ; ?重置slave狀態.
start slave ; 啟動slave 狀態(開始監聽msater的變化)
stop slave; 暫停slave狀態;
查看mysql帳號:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。