(1)基本的理論知識:
首先,要實現mysql的讀寫分離,可以使用mysql的主(master)從(slave)複製(Replication)來實現:
主(master)庫只提供寫數據的服務,而從(slave)庫只提供讀數據的服務。
什麼是主從複製?
簡單來說,就是主(master)庫把對數據改動的操作保存到一個文件裏面,而從(slave)庫會隔一個時間間隔根據這個文件更新自己的數據
(所以讀到的數據是有延遲的,這個延遲取決於從(slave)庫設置的時間間隔)
關於主從複製的詳細內容,可以問度娘
(2)實際操作步驟:
使用以下三臺電腦:
主庫(master)的IP:192.168.1.65
從庫1(slave)的IP:192.168.1.49
從庫2(slave)的IP:192.168.1.64
三臺電腦都安裝了MySQL5.5(實驗室的電腦,版本比較老~)
然後把三臺電腦的mysql服務停掉
A.打開主庫(master)的mysql安裝目錄,打開配置文件my.ini
B.在[mysql]的後面添加如下代碼:
1 2 3 4 5 |
|
C.打開主庫(master)的mysql服務,進入mysql的命令行,輸入如下代碼:
1 |
|
重要:記下File(日誌文件)和Position 分別給兩個從庫複製權限(上圖中的)
1 |
|
其中的’slave’爲登錄賬號,’123456’爲密碼,’192.168.1.%’爲從庫的IP(這裏偷懶使用了通配符~)
E.打開從庫1的mysql安裝目錄,打開配置文件my.ini,在[mysql]的後面添加如下代碼:
1 2 3 |
|
保存後啓動從庫1的mysql服務,進入mysql的命令行,輸入如下代碼:
先停止它的slave:
1 |
|
再改變它的master:
1 2 3 4 5 6 |
|
再啓動它的slave:
1 |
|
然後再輸入如下代碼,檢查是否成功:
1 |
|
如果看到上面這句話的,那就沒問題了~
當然你也可以在主庫(master)上做修改數據的操作,看看從庫會不會更新~(注意:從庫(slave)的數據庫需要自己手動創建)
F.對從庫2的操作和從庫1的基本一樣
打開配置文件my.ini,在[mysql]的後面添加如下代碼:
1 2 3 |
|
因爲從庫1的server-id爲2,所以從庫2的server-id不能爲2
保存後啓動從庫2的mysql服務。
注意要再從主庫上獲取一次最新的File(日誌文件)和Position(日誌位置)
先停止它的slave:
1 |
|
再改變它的master:
1 2 3 4 5 6 |
|
剩下的操作和從庫1一毛一樣~
G.到這裏,mysql的讀寫分離就完成了~
但是這樣不夠方便,因爲我們寫數據時需要連接主庫,而讀數據時需要連接從庫。在連接從庫時,不能負載均衡。
這時候就要靠神器Amoeba了~
它就像一箇中轉站,將所有的寫請求分配給主庫,讀請求分配給從庫,並且在從庫之間實現負載均衡,丟個官網的圖~
H.配置Amoeba服務器:
這裏最好找另外的一臺電腦充當Amoeba服務器:192.168.1.62
博主使用的版本是amoeba-mysql-3.0.5-RC-distribution,鏈接如下:
下載鏈接
下載完成後解壓,打開conf文件夾,配置amoeba.xml和dbServer.xml:
amoeba.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
|
dbServers.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
|
I.給Amoeba授權:
分別到主庫、從庫1、從庫2的mysql控制檯下給Amoeba服務器授權,代碼如下:
1 |
|
這裏的賬號和密碼必須和dbServers.xml中的配置一毛一樣:
連接Amoeba數據庫,這裏的賬號、密碼、Ip、端口必須和amoeba.xml的配置一毛一樣:
然後使用這個連接對數據庫test做數據修改操作,再到主庫從庫上面查看是否有同步修改,如果有,那就完成了讀寫分離~
如果想看看有沒有實現負載均衡,可以打開Amoeba安裝目錄的logs/root.log查看查詢日誌。
然後我們的應用就可以通過連接Amoeba服務器來訪問數據庫中的數據了