實作Mysql主從複制讀寫分離記錄
本次研究是通過配置Mysql實作主從複制,使用Amoeba代理實作讀寫分離。
參照資料:http://my.oschina.net/u/1169079/blog/390726
Mysql主從複制:
根據查資料發現,隻需修改對應的mysql檔案目錄下的my.ini配置檔案,之後在指令行界面執行相關指令後,即可實作主從複制。分工及工具如下
主資料庫:董勝燕 IP:192.168.1.102 Mysql版本:5.7
從資料庫:高宇飛 IP:192.168.1.103 Mysql版本:5.7
修改主資料庫配置
首先,修改主資料庫的my.ini配置檔案 :
在[mysqld] 下增加如圖所示部分語句,其中字段代表含義:
binlog-ignore-db | 指定忽略複制的資料庫 |
log-bin | 指定資料庫記錄檔,複制資料讀取此日志 |
server-id | Mysql服務id,多個主從時一定不能重複。 |
symbolic-links | 禁用符号連結,防止安全風險 |
修改完成後,重新開機Mysql服務,打開指令行視窗,驗證是否已打開主資料庫:
輸入指令登入mysql,輸入 show master status\G;檢視主資料庫狀态,出現以下結果,既是配置成功。
此時,需要記住File與Position的值,修改從資料庫配置時需要使用。
啟動成功後,需要對從資料庫進行授權,執行以下語句即可:
GRANT REPLICATION SLAVE ON *.* to 'slave'@'192.168.1.103'
identified by 'root'
修改從資料庫配置
其次,修改從資料庫的my.ini配置檔案:
在[mysqld]下,增加
server-id 從資料庫的服務id,保證其唯一性即可;
slave-skip-errors = all,因為複制過程中如果遇到錯誤異常,則會導緻複制中斷,無法繼續運作,是以設定此語句 跳過所有錯誤。
修改完成後,重新開機Mysql服務,打開指令行視窗,登入mysql,執行設定主從資料庫同步點:
change master to master_host='192.168.1.102',master_user='slave',master_password='root',master_log_file='test.000003',master_log_pos=1365332
其中設定參數代表含義:
master_host | 主資料庫的IP位址 |
master_user | 主資料庫的使用者 |
master_password | 主資料庫的密碼 |
master_log_file | 主資料庫的日志檔案,主資料庫中得到 |
master_log_pos | 主資料庫的端口,主資料庫中得到 |
設定完成之後,執行startslave啟動從資料庫:
啟動成功後,檢視從資料庫狀态:
當Slave_IO_Runing顯示Connecting或Yes,Slave_SQL_Running顯示Yes時,即為主從連接配接成功。
驗證主從複制是否成功
打開連接配接工具,連接配接資料庫,随意進行資料庫增删、資料增删改操作,都能同步:
未修改前: 主資料庫新增一個資料庫後,重新整理從資料庫:
在test資料庫下建立一個sixt表,字段為id,name。進行增删改查均可複制。
讀寫分離
根據查資料,本次決定采用Amoeba實作讀寫分離。在參考資料中詳細寫明了優缺點。
使用Amoeba前需要去官網下載下傳相應版本的檔案包,本次下載下傳的是Windows64位的:
amoeba-mysql-3.0.5-RC版本,解壓至目錄即可。
修改Amoeba配置檔案
打開解壓目錄,找到amoeba-mysql-3.0.5-RC\conf,其中amoeba.xml和dbServices.xml是主要配置檔案。
配置dbServices.xml檔案:
其中隻需修改,預設連接配接的資料庫資訊。設定主從資料庫的IP位址資訊即可。其餘設定可參照API按需進行更改。
配置amoeba.xml檔案:
需要設定資料庫連接配接密碼,和讀寫的配置,其中寫入資料庫為主資料庫,讀取資料庫為從資料庫。
啟動Amoeba
修改配置完成後,需要打開指令行視窗,執行運作Amoeba:
運作檔案目錄amoeba-mysql-3.0.5-RC\bin下的launcher.bat即可。
內建進系統并測試
最終,将Amoeba內建進系統一起測試。
直接更改項目中JDBC連接配接配置,簡單寫出來一個增删該查進行驗證。
隻需修改連接配接端口為8066即可,連接配接資料庫為test,打開資料庫
可以發現此時主資料庫中隻有一條資料,從資料庫中有兩條資料。
程式sql語句部分的代碼如下:
查詢
運作程式,檢視讀取的資料:
可以看到,查詢結果是從資料庫的兩條記錄。讀的操作來自于從資料庫
新增
點選新增,進行新增操作:
儲存後,自動重新整理頁面:
此時打開資料庫檢視:
主資料庫和從資料庫中都有一條新增的記錄。
修改
此時點選修改,因為修改為寫操作,操作于主資料庫,我們修改主資料庫沒有的id=2的記錄:
提示資訊為修改失敗,檢視背景斷點,可以看出傳回值為0,沒有這條記錄,操作的是主資料庫:
删除
删除與修改相同,删除主資料庫中存在的資料,則從資料庫同步複制執行删除語句, 删除主資料中不存在的資料,則删除失敗。