Windows中使用Mysql-Proxy實現Mysql讀寫分離


Windows中使用Mysql-Proxy實現Mysql讀寫分離

簡介

讀寫分離

當業務量上來時,往往一台單機的mysql數據庫不能滿足性能需求,這時候就需要配置主從庫讀寫分離來解決性能瓶頸。簡單的來說,就是原先一台數據庫既讀又寫,現在改成一台寫和1台以上讀。
讀寫分離

環境准備

  1. 3台windows server 2012(理論上windows server 2003+ 都行)
  2. mysql 5.7
  3. mysql-proxy-0.8.5-windows-x86-32bit
  4. navicat for mysql (如果你對命令行比較熟,忽略這個)

分配IP

  1. 主數據庫:192.168.47.128
  2. 從數據庫:192.168.47.129
  3. 中間件服務器: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_filemaster_log_pos就是配置主數據庫查詢到的FilePosition

啟動從庫

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-32bitbin目錄中,雙擊運行
接下來,用你的客戶端工具連接 192.168.47.130:6217(6217這個端口隨便設置,跟上面的bat里面一致就行),測試是否可以能正常連接,如果能連接,但是不能顯示讀寫分離的數據庫,那一般是權限設置問題

總結

在windows下部署Mysql讀寫分離,還是比較少的,windows的中間件也很久沒更新了,找到的資料大部分都在linux環境中,官方文檔也沒找到相關說明,參考了多個地方,才弄成功。當然這只是初級的讀寫分離方案,要將它做的好,還有很多事情要做,但是這對於理解讀寫分離有比較大的意義。

參考博客
https://blog.csdn.net/will5451/article/details/72731656


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM