(7)資料庫讀寫分離,主從同步實現方法(資料庫設定)

weixin_34290000發表於2018-07-10

實現思路 

通過設定主從資料庫實現讀寫分離,資料庫負責“操作”,資料庫負責“操作”,根據壓力情況,從資料庫可以部署多個提高“讀”的速度,藉此來提高系統總體的效能。

基礎知識

要實現讀寫分離,就要解決主從資料庫資料同步的問題,在主資料庫寫入資料後要保證從資料庫的資料也要更新。主從資料庫同步的實現思路如圖: 

9930763-2d78b877c1657a5a.png

主伺服器master記錄資料庫操作日誌Binary log,從伺服器開啟i/o執行緒將二進位制日誌記錄的操作同步到relay log(存在從伺服器的快取中),另外sql執行緒將relay log日誌記錄的操作在從伺服器執行。 

記住這張圖,接下來基於這個圖實際設定主從資料庫。

主從資料庫設定的具體步驟

首先要有兩個資料庫伺服器master、slave(也可以用一個伺服器安裝兩套資料庫環境執行在不同埠,slave也可以舉一反三設定多個),我們窮人就買虛擬雲伺服器玩玩就行 0.0。以下操作假設你的兩臺伺服器上都已經安裝好了mysql服務。

1.開啟mysql資料庫配置檔案

vim /etc/my.cnf

2.在主伺服器master上配置開啟Binary log,主要是在[mysqld]下面新增:

server-id=1

log-bin=master-bin

log-bin-index=master-bin.index

如圖: 

9930763-136946ea4a2d7bed.png

3.重啟mysql服務

service mysql restart      ps:重啟方式隨意

4.檢查配置效果,進入主資料庫並執行

mysql> SHOW MASTER STATUS;

可以看到下圖表示配置沒問題,這裡面的File名:master-bin.000001 我們接下來在從資料庫的配置會使用:

9930763-4d75119e581a27be.png

5.配置從伺服器的 my.cnf

在[mysqld]節點下面新增:

server-id=2

relay-log-index=slave-relay-bin.index

relay-log=slave-relay-bin

這裡面的server-id 一定要和主庫的不同,如圖: 

9930763-3c3252360053c798.png

配置完成後同樣重啟從資料庫一下 : service mysql restart

6.接下來配置兩個資料庫的關聯

(1)首先我們先建立一個操作主從同步的資料庫使用者,切換到主資料庫執行:

mysql>createuser repl;

mysql> GRANT REPLICATION SLAVEON*.*TO'repl'@'從xxx.xxx.xxx.xx'IDENTIFIEDBY'mysql';

mysql> flush privileges;

這個配置的含義就是建立了一個資料庫使用者repl,密碼是mysql, 在從伺服器使用repl這個賬號和主伺服器連線的時候,就賦予其REPLICATION SLAVE的許可權, *.* 表面這個許可權是針對主庫的所有表的,其中xxx就是從伺服器的ip地址。 

(2)進入從資料庫後執行:mysql> change master to master_host='主xxx.xxx.xxx.xx',master_port=3306,master_user='repl',master_password='mysql',master_log_file='master-bin.000001',master_log_pos=0;

這裡面的xxx是主伺服器ip,同時配置埠,repl代表訪問主資料庫的使用者,上述步驟執行完畢後

(3)執行start slave啟動配置:mysql> start slave;

停止主從同步的命令為:

mysql>stopslave;

檢視狀態命令,\G表示換行檢視

mysql> show slave status\G;

可以看到狀態如下:

9930763-097651839069b591.png

這裡看到從資料庫已經在等待主庫的訊息了,接下來在主庫的操作,在從庫都會執行了。我們可以主庫負責寫,從庫負責讀(不要在從庫進行寫操作),達到讀寫分離的效果。

我們可以簡單測試:

在主資料庫中建立一個新的資料庫:

mysql>createdatabase testsplit;

在從資料庫檢視資料庫:

mysql> show databases;

可以看到資料庫也有testsplit這張表了,這裡就不上圖了,親測可用。在主資料庫插入資料,從資料庫也可以查到。 至此已經實現了資料庫主從同步

相關文章