1、簡介
讀寫分離:當業務量上來時,往往一台單機的mysql數據庫不能滿足性能需求,這時候就需要配置主從庫讀寫分離來解決性能瓶頸。簡單的來說,就是原先一台數據庫既讀又寫,現在改成一台寫和1台以上讀。
1.1、環境准備
- 3台windows server 2012(理論上windows server 2003+ 都行)
- mysql 5.6
- mysql-proxy-0.8.5-windows-x86-32bit
- navicat for mysql (如果你對命令行比較熟,忽略這個)
1.2、分配IP
- 主數據庫:192.168.103.207
- 從數據庫:192.168.103.208
- 中間件服務器:192.168.103.203
1.3、安裝mysql
在[主]192.168.103.207和[從]192.168.103.208兩台機子上根據向導模式一步步安裝mysql 5.6,這里我選擇Server環境,安裝后先停止mysql服務
2、配置my.ini
在主從的服務器上分別找到以下路徑的my.ini文件
C:\ProgramData\MySQL\MySQL Server 5.6\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一樣,可以設置多個
8.0額外增加
#選擇row模式
binlog-format=ROW
從數據庫配置配置的mysqld節點下加入
[mysqld] log-bin=mysql-bin #從庫會基於此log-bin來做復制 replicate-do-db=mytest #用於讀寫分離的具體數據庫,這里我創建了mytest作測試
8.0額外增加
#選擇row模式
binlog-format=ROW
注:在對從數據庫配置的時候,需要在文件內找到找到server-id,將它改成和主庫不一樣的編號,例如
主庫
server-id=1
從庫
server-id=2
多個從庫時,可以遞增填寫
3、配置主數據庫
開啟主數據庫服務,創建用來測試讀寫分離的數據庫
對用戶授權使其用於復制主庫數據
grant replication slave on *.* to 'slave123'@'192.168.103.%' identified by '123456';
用戶名:slave123
密碼:123456
然后查詢主數據庫狀態,並記錄下File和Position字段的值
mysql> show master status; +------------------+----------+--------------+--------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+--------------------------+-------------------+ | mysql-bin.000001 | 2073 | mytest | mysql,information_schema | | +------------------+----------+--------------+--------------------------+-------------------+ 1 row in set (0.05 sec)
我的
File:mysql-bin.000001
Position:2073
4、配置從數據庫
開啟從數據庫服務,手動創建測試讀寫分離的庫,這邊不會幫你自動創建,同時也創建和主庫一樣的用戶,我這里還是先停止從庫
stop slave;
設置它的master
change master to master_host='192.168.103.207', master_port=3307, master_user='slave123', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=2073;
注:這里的 master_log_file和master_log_pos就是配置主數據庫查詢到的File和Position
啟動從庫
start slave;
檢查是否啟動成功
show slave status;
如果Slave_IO_State字段顯示 Waiting for master to send event說明成功,當然你也可以在主庫表中插入一條數據,看看從庫是否有同步,到這里,已經配置好主從同步了。
5、配置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:/mysql-proxy-0.8.5-windows-x86-32bit/lib/mysql-proxy/lua/admin.lua proxy-backend-addresses=192.168.103.207:3307 proxy-read-only-backend-addresses=192.168.103.208:3307 proxy-lua-script=C:/mysql-proxy-0.8.5-windows-x86-32bit/share/doc/mysql-proxy/rw-splitting.lua log-file=C:/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文件,內容如下
"C:\mysql-proxy-0.8.5-windows-x86-32bit\bin\mysql-proxy.exe" -P 192.168.103.203:6217 --defaults-file="C:\mysql-proxy-0.8.5-windows-x86-32bit\bin\mysql-proxy.conf"
也放在mysql-proxy-0.8.5-windows-x86-32bit的bin目錄中,雙擊運行
接下來,用你的客戶端工具連接 192.168.103.203:6217(6217這個端口隨便設置,跟上面的bat里面一致就行),測試是否可以能正常連接,如果能連接,但是不能顯示讀寫分離的數據庫,那一般是權限設置問題