基於Mysql-Proxy實現Mysql的主從複製以及讀寫分離(上)

基於Mysql-Proxy實現Mysql的主從複製以及讀寫分離(上)mysql

  上週BOSS給分配任務讓實現一下Mysql數據庫的主從複製以及讀寫分離,而後花了一盞茶的功夫進行了調研,發現主從複製數據庫進行一番配置直接能夠實現,而讀寫分離則須要一些軟件的支持,基本上讀寫分離的實現有兩種:sql

  • Amoeba(變形蟲):是由前阿里員工實現的一個以MySQL爲底層數據存儲,並對應用提供MySQL協議接口的proxy。可是因爲沒人維護了,並且聽說做者也再也不回答開發者的問題,因此不予考慮。
  • Mysql-Proxy:是一個處於你的client端和MySQL server端之間的簡單程序,它能夠監測、分析或改變它們的通訊。它使用靈活,沒有限制,常見的用途包括:負載平衡,故障、查詢分析,查詢過濾和修改等等。簡單的說,MySQL Proxy就是一個鏈接池,負責將前臺應用的鏈接請求轉發給後臺的數據庫,而且經過使用lua腳本,能夠實現複雜的鏈接控制和過濾,從而實現讀寫分離負載平衡。而且還有各類資料以及維護,雖然須要瞭解一些lua語言的東西,可是語言麼,上手仍是很簡單的。

  在基於穩定性、後期遇到問題解決難易性、與現有平臺整合的難易性、實現的難易性以及種種狀況考慮以後,最終決定使用mysql-proxy來實現數據庫的讀寫分離。囉嗦那麼多,接下來開始說說具體的實現方法。數據庫

環境與配置vim

  系統:CentOS6.5服務器

  Master:172.16.19.2架構

  Slave:172.16.19.24ide

  mysql-proxy:172.16.19.14測試

  安裝就不說了,基本都是yum install進行安裝的。下圖是基本的架構圖(忘了從哪裏扒拉出來的了,感謝做者)。
lua

主從複製的實現spa

  主從複製的實現極其簡單,只須要改一下vim /etc/my.cnf。

  Master的配置:

vim /etc/my.cnf
log-bin=mysql-bin   #新增
server-id=1              #新增

  配置完以後,重啓mysql,而後執行以下指令:

master:mysql> grant replication slave on *.* to 'root'@'%' identified by '123456';而後執行show master status
Mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 261 | | |
+------------------+----------+--------------+------------------+

  用腦殼或者紙筆記錄一下File以及Positin,在這裏是mysql-bin.000005以及261。

  Slave的配置:

1 vim /etc/my.cnf
2 log-bin=mysql-bin   #新增
3 server-id=2             #新增  server-id不能同樣

  一樣的,配置完成以後須要重啓mysql服務,而後執行以下指令:

mysql> change master to master_host='172.16.19.2',master_user='root',master_password='123456',master_log_file='mysql-bin.000005',master_log_pos=261;
mysql> start slave;

  接下來,查看slave的狀態,查看是否配置成功:

 1 show slave status\G
 2 ==============================================
 3 **************** 1. row *******************
 4 Slave_IO_State:
 5 Master_Host: 172.16.19.2
 6 Master_User: rep1
 7 Master_Port: 3306
 8 Connect_Retry: 60
 9 Master_Log_File: mysql-bin.000005
10 Read_Master_Log_Pos: 261
11 Relay_Log_File: localhost-relay-bin.000008
12 Relay_Log_Pos: 561
13 Relay_Master_Log_File: mysql-bin.000005
14 Slave_IO_Running: YES
15 Slave_SQL_Running: YES
16 Replicate_Do_DB:
17 ……………省略若干……………
18 Master_Server_Id: 1
19 1 row in set (0.01 sec)
20 ==============================================

  其中Slave_IO_Running 與 Slave_SQL_Running 的值都必須爲YES,才代表狀態正常。

主從複製的測試

  先查看主服務器Master:

  

  而後建立一個數據庫,y:

  接着去從服務器slave查看,會發現從服務器也有了y數據庫。至此數據庫的主從複製就實現了。有點晚了,至於說讀寫分離就下次再說吧。

 

PS:本博客歡迎轉發,但請註明博客地址及做者,因本人水平有限,如有不對之處,歡迎指出,謝謝~

  博客地址:http://www.cnblogs.com/voidy/

  博客新址:http://voidy.net

  <。)#)))≦

相關文章
相關標籤/搜索