基於Mysql-Proxy實現Mysql的主從復制以及讀寫分離(上)
上周BOSS給分配任務讓實現一下Mysql數據庫的主從復制以及讀寫分離,然后花了一盞茶的功夫進行了調研,發現主從復制數據庫進行一番配置直接可以實現,而讀寫分離則需要一些軟件的支持,基本上讀寫分離的實現有兩種:
- Amoeba(變形蟲):是由前阿里員工實現的一個以MySQL為底層數據存儲,並對應用提供MySQL協議接口的proxy。但是由於沒人維護了,而且據說作者也不再回答開發者的問題,所以不予考慮。
- Mysql-Proxy:是一個處於你的client端和MySQL server端之間的簡單程序,它可以監測、分析或改變它們的通信。它使用靈活,沒有限制,常見的用途包括:負載平衡,故障、查詢分析,查詢過濾和修改等等。簡單的說,MySQL Proxy就是一個連接池,負責將前台應用的連接請求轉發給后台的數據庫,並且通過使用lua腳本,可以實現復雜的連接控制和過濾,從而實現讀寫分離和負載平衡。並且還有各種資料以及維護,雖然需要了解一些lua語言的東西,但是語言么,上手還是很簡單的。
在基於穩定性、后期遇到問題解決難易性、與現有平台整合的難易性、實現的難易性以及種種情況考慮之后,最終決定使用mysql-proxy來實現數據庫的讀寫分離。啰嗦那么多,接下來開始說說具體的實現方法。
環境與配置
系統:CentOS6.5
Master:172.16.19.2
Slave:172.16.19.24
mysql-proxy:172.16.19.14
安裝就不說了,基本都是yum install進行安裝的。下圖是基本的架構圖(忘了從哪里扒拉出來的了,感謝作者)。

主從復制的實現
主從復制的實現極其簡單,只需要改一下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
<。)#)))≦
