1. 程式人生 > >mysql-8.0.12讀寫分離

mysql-8.0.12讀寫分離

安裝包下載地址:https://downloads.mysql.com/archives/proxy/

 

環境

proxy:172.16.1.20

master:172.16.1.21

slave1:172.16.1.22

slave2:172.16.1.23

 

本文選用mysql-proxy作為轉發中介軟體, 版本為mysql-proxy-0.8.5-linux-el6-x86-64bit

 

一:在開啟主從複製的情況下,在master建立供 proxy連線的賬號(這樣就等於同時在所有mysql上建立了連線賬號)

mysql > create user 'rw'@'%' identified with mysql_native_password by 'tqw961110';

mysql > grant all on *.* to 'rw'@'%';

 

二:停用slave(所有mysql都執行一遍)

mysql > stop slave;

mysql > reset slave all;

 

三:解壓安裝包並進入

cd  /tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/

mkdir  lua     建立存放lua指令碼的目錄

mkdir  logs   建立存放日誌的目錄

cp share/doc/mysql-proxy/rw-splitting.lua ./lua #複製讀寫分離配置檔案

cp share/doc/mysql-proxy/admin-sql.lua ./lua #複製管理指令碼

vim /etc/mysql-proxy.cnf #建立配置檔案

[mysql-proxy]
user=root
admin-username=rw                              #proxy的連線賬號(主從都要有)
admin-password=tqw961110                  #密碼
proxy-address=172.16.1.20:4040          #proxy執行的地址
proxy-read-only-backend-addresses=172.16.1.22,172.16.1.23               #只讀服務池
proxy-backend-addresses=172.16.1.21                                                   #寫服務池
proxy-lua-script=/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/lua/rw-splitting.lua                  #讀寫指令碼存放位置
admin-lua-script=/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/lua/admin-sql.lua                   #管理指令碼存放位置
log-file=/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/logs/mysql.log                                       #日誌存放位置
log-level=info                        #定義log日誌級別,由高到低分別有(error|warning|info|message|debug)

daemon=true                         #以守護程序的方式執行
keepalive=true                       #mysql-proxy崩潰時,嘗試重啟。

 

四:修改讀寫指令碼

if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,          #預設超過4個連線時才開始讀寫分離,這裡修改為1.
max_idle_connections = 1,         #預設8,改為1。

is_debug = false
}
end

 

啟動proxy

/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/bin/mysql-proxy    --defaults-file=/etc/mysql-proxy.cnf

 

檢視日誌

已經將後端mysql加進連線池

 

檢視埠

netstat -atunlp | grep 4040

tcp        0      0 172.16.1.20:4040        0.0.0.0:*               LISTEN      33297/mysql-proxy

 

測試讀寫效能

在proxy伺服器上登陸mysql(proxy伺服器需要有mysql命令。可以yum -y install mysql)

mysql  -h  172.16.1.20  -urw -ptqw961110  --port=4040

 

分別在主從資料庫插入資料

create  database test;

use test;

create table test(id int(10),name varchar(20));

insert into t values(1,'this_is_master'); !!!!在slave上則是執行 insert into t values(1,'this_is_slave');

 

此時master與slave中的test庫test表的內容是不同的。

 

在proxy伺服器上

use test;

select * from test;

 

顯示的是slave的內容

 

再在proxy伺服器上插入資料試試

insert into t values(1,'this_is_proxy');

select * from test;

 

顯示的依舊是slave的內容

 

但是在master伺服器上檢視內容

select * from test;

已經可以看到從proxy插入的資料

 

經測試,寫操作只會在master上進行,而讀操作只會在slave上進行。

至此,mysql讀寫分離成功。

 

若想關閉proxy

killall  -9  mysql-proxy