Windows中使用Mysql-Proxy實現Mysql讀寫分離
簡介
讀寫分離
當業務量上來時,往往一台單機的mysql數據庫不能滿足性能需求,這時候就需要配置主從庫讀寫分離來解決性能瓶頸。簡單的來說,就是原先一台數據庫既讀又寫,現在改成一台寫和1台以上讀。
環境准備
- 3台windows server 2012(理論上windows server 2003+ 都行)
- mysql 5.7
- mysql-proxy-0.8.5-windows-x86-32bit
- navicat for mysql (如果你對命令行比較熟,忽略這個)
分配IP
- 主數據庫:192.168.47.128
- 從數據庫:192.168.47.129
- 中間件服務器:192.168.47.130
安裝mysql
在[主]192.168.47.128和[從]192.168.47.129兩台機子上根據向導模式一步步安裝mysql 5.7,這里我選擇developer環境,安裝后先停止mysql服務
配置my.ini
在主從的服務器上分別找到以下路徑的my.ini文件
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
主數據庫配置的mysqld節點下加入
[mysqld]
log-bin=mysql-bin #從庫會基於此log-bin來做復制
binlog-do-db=mytest #用於讀寫分離的具體數據庫,這里我創建了mytest作測試
binlog_ignore_db=mysql #不用於讀寫分離的具體數據庫
binlog_ignore_db=information_schema #和binlog-do-db一樣,可以設置多個
從數據庫配置配置的mysqld節點下加入
[mysqld]
log-bin=mysql-bin #從庫會基於此log-bin來做復制
replicate-do-db=mytest #用於讀寫分離的具體數據庫,這里我創建了mytest作測試
注:在對從數據庫配置的時候,需要在文件內找到找到server-id,將它改成和主庫不一樣的編號,例如
主庫
server-id=1
從庫
server-id=2
多個從庫時,可以遞增填寫
配置主數據庫
開啟主數據庫服務,創建用來測試讀寫分離的數據庫
對用戶授權使其用於復制主庫數據
grant
replication slave on
*.* to
'slave'@'192.168.47.%'
identified by
'123456';
用戶名:slave
密碼:123456
然后查詢主數據庫狀態,並記錄下File和Position字段的值
show master status;
我的
File:mysql-bin.000005
Position:1767
配置從數據庫
開啟從數據庫服務,手動創建測試讀寫分離的庫,這邊不會幫你自動創建,同時也創建和主庫一樣的用戶,我這里還是用root
先停止從庫
stop slave
設置它的master
change master to
master_host='192.168.47.128',
master_port=3306,
master_user='root',
master_password='root',
master_log_file='mysql-bin.000005',
master_log_pos=1767;
注:這里的 master_log_file和master_log_pos就是配置主數據庫查詢到的File和Position
啟動從庫
start slave;
檢查是否啟動成功
show slave status;
如果Slave_IO_State字段顯示 Waiting for master to send event說明成功,當然你也可以在主庫表中插入一條數據,看看從庫是否有同步,到這里,已經配置好主從同步了。
配置Mysql-Proxy
下載 **mysql-proxy-0.8.5-windows-x86-32bit ** 解壓到任意位置,它是綠色免安裝版的,創建配置文件 mysql-proxy.conf,內容如下
[mysql-proxy]
admin-username=root
admin-password=root
admin-lua-script=C:/soft/mysql-proxy-0.8.5-windows-x86-32bit/lib/mysql-proxy/lua/admin.lua
proxy-backend-addresses=192.168.47.128:3306
proxy-read-only-backend-addresses=192.168.47.129:3306
proxy-lua-script=C:/soft/mysql-proxy-0.8.5-windows-x86-32bit/share/doc/mysql-proxy/rw-splitting.lua
log-file=C:/soft/mysql-proxy-0.8.5-windows-x86-32bit/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
admin-username:用於中間件連接的用戶,這里我還是用root偷懶
admin-password:同上用戶密碼
admin-lua-script:根據存放的文件位置自行調整
proxy-backend-addresses:主庫服務器+端口
proxy-read-only-backend-addresses:從庫服務器+端口,多個從庫用,隔開
proxy-lua-script:根據存放的文件位置自行調整
log-file:日志文件存放位置,如果你指定了一個路徑,請確保手動創建了對應的文件夾,否則會報錯
log-level:日志級別
daemon:以守護進程方式運行
keepalive:長連接
將上面創建的文件復制到mysql-proxy-0.8.5-windows-x86-32bit的bin目錄中
創建install.bat文件,內容如下
mysql-proxy -P 192.168.47.130:6217 --defaults-file=C:\soft\mysql-proxy-0.8.5-windows-x86-32bit\bin\mysql-proxy.conf
也放在mysql-proxy-0.8.5-windows-x86-32bit的bin目錄中,雙擊運行
接下來,用你的客戶端工具連接 192.168.47.130:6217(6217這個端口隨便設置,跟上面的bat里面一致就行),測試是否可以能正常連接,如果能連接,但是不能顯示讀寫分離的數據庫,那一般是權限設置問題
總結
在windows下部署Mysql讀寫分離,還是比較少的,windows的中間件也很久沒更新了,找到的資料大部分都在linux環境中,官方文檔也沒找到相關說明,參考了多個地方,才弄成功。當然這只是初級的讀寫分離方案,要將它做的好,還有很多事情要做,但是這對於理解讀寫分離有比較大的意義。
參考博客
https://blog.csdn.net/will5451/article/details/72731656