mysql(mariadb)數據庫的讀寫分離(mysql-proxy)(四)(centos8)

一、讀寫分離原理

mariadb(mysql)讀寫分離的基本的原理是讓主數據庫處理事務性增加、修改、更新、刪除操作(CREATE、INSERT、UPDATE、DELETE),而從數據庫處理SELECT查詢操作。讀寫分離的前提是基於主從複製,這樣可以保證在master上修改數據,slave同步之後,web應用可以讀取到slave端的數據。

二、讀寫分離環境

服務器 IP 查詢命令
數據庫Master的IP 192.168.1.200
數據庫Slave的IP 192.168.1.210
mysql-proxy服務器的IP 192.168.1.220
mariadb版本 mariadb-server-10.3.11-2.module_el8.0.0+35+6f2527ed.x86_64
rpm -qa | grep mariadb
mysql-proxy版本 mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit
linux版本 CentOS Linux release 8.0.1905 (Core) cat /etc/redhat-release

三、讀寫分離部署

一、服務器200、210、220安裝數據庫mariadb(mysql)服務

安裝過程請參照博客:https://blog.csdn.net/renfeigui0/article/details/102743258

二、服務器200、210配置mariadb(mysql)服務主從複製,確保主從工作正常運行

配置過程請參照博客:https://blog.csdn.net/renfeigui0/article/details/102797353

三、服務器220安裝mariadb(mysql)proxy服務

1、登錄官網https://downloads.mysql.com/archives/proxy/,根據自己的系統選擇合適的軟件版本。
在這裏插入圖片描述

2、下載mariadb(mysql)proxy軟件,解壓並移動到指定目錄/usr/local/mysql-proxy。

wget  https://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
ls
tar zxf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit  /usr/local/mysql-proxy

3、使用如下命令,編輯環境變量配置文件內容。

export PATH=$PATH:$HOME/bin:/usr/local/mysql-proxy/bin

4、進入mysql-proxy目錄,編輯配置文件,增加如下配置文件內容。(配置文件中不要有註釋空格等其他內容,不然啓動程序時會報錯)。

cd /usr/local/mysql-proxy/
vi  mysql-proxy.conf

配置文件內容

[mysql-proxy]
plugins=proxy
proxy-address=192.168.1.220:4040
proxy-backend-addresses=192.168.1.200:3306
proxy-read-only-backend-addresses=192.168.1.210:3306
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
log-file=/usr/local/mysql-proxy/mysql-proxy.log
log-level=debug
keepalive=true
daemon=true

5、啓動mysql-proxy服務,如果報錯“(0660 or stricter required)”,如下圖一,修改配置文件權限爲660即可,服務正常啓動後如下圖二。查看啓動日誌,如下圖三。

mysql-proxy   --defaults-file=/usr/local/mysql-proxy/mysql-proxy.conf
chmod   660   /usr/local/mysql-proxy/mysql-proxy.conf
mysql-proxy   --defaults-file=/usr/local/mysql-proxy/mysql-proxy.conf
netstat -antp |grep mysql-proxy
 cat    /usr/local/mysql-proxy/mysql-proxy.log    #查看日誌

圖一
在這裏插入圖片描述
圖二
在這裏插入圖片描述

圖三
在這裏插入圖片描述

6、修改讀寫分離配置文件rw-splitting.lua,1表示只要有一個連接,就進行讀寫分離。重啓mysql-proxy服務。

find /  -name  rw-splitting.lua
vi /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
pkill  mysql-proxy
mysql-proxy   --defaults-file=/usr/local/mysql-proxy/mysql-proxy.conf

在這裏插入圖片描述

7、主從服務器200、210,登錄數據庫授權賬戶mysqlproxy,密碼123456,訪問所有數據庫所有權限。

grant all on *.*  to  'mysqlproxy'@'%'identified  by '123456'; 
flush  privileges;
grant all on *.*  to  'mysqlproxy'@'%'identified  by '123456'; 
flush  privileges;

8、讀寫分離測試。

寫入測試(在proxy上使用建表語句成功在master上創建數據表stu,slave通過主從複製,得到stu數據表。在slave服務器上使用“stop slave”命令先停止slave,再從proxy上插入數據,master上通過查詢看到新插入的數據,slave上卻查詢不到新插入的數據,表明通過proxy插入語句的數據是寫入master的數據表中。proxy也查詢不到新數據,表明通過proxy查詢的數據是查詢的slave的數據庫)

步驟 master slave proxy
1 mysql -uroot -p mysql -uroot -p mysql -umysqlproxy -p -P 4040 -h 192.168.1.220
2 show databases; show databases; show databases;
3 use newdb; use newdb; use newdb;
4 show tables; show tables; show tables;
5 create table stu (age int, name char(40) );
6 show tables; show tables; show tables;
7 stop slave;
8 insert into stu values (220, ‘proxy’);
9 select * from stu; select * from stu; select * from stu;

在這裏插入圖片描述
在這裏插入圖片描述

讀取測試(salve服務器使用“start slave”啓動slave服務,先通過proxy插入三條數據,然後slave刪除一條數據,再次在proxy查詢時,只能看到2條數據,說明proxy查詢讀的是從庫)

步驟 master slave proxy
1 start alave;
2 insert into stu values (200, ‘master’);
3 insert into stu values (210, ‘slave’);
4 insert into stu values (220, ‘proxy’);
5 select * from stu; select * from stu; select * from stu;
6 delete from stu where age=‘220’;
7 select * from stu; select * from stu; select * from stu;

在這裏插入圖片描述

9、mysql-proxy.conf配置文件說明。

參數 說明
[mysql-proxy]
plugins=proxy 在mysql-proxy啓動時加載的插件。
proxy-address=192.168.1.220:4040 代理服務監聽的地址和端口,不加端口號時,默認4040。
proxy-backend-addresses=192.168.1.200:3306 指定後端master,寫入mysql服務器的地址和端口。
proxy-read-only-backend-addresses=192.168.1.210:3306 指定後端slave,只讀mysql服務器的地址和端口。
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua 指定讀寫分離配置文件位置。
log-file=/usr/local/mysql-proxy/mysql-proxy.log 指定日誌文件位置。
log-level=debug 定義log日誌級別,由高到低分別有(error
keepalive=true 以守護進程方式啓動mysql-proxy。
daemon=true 在mysql-proxy崩潰時嘗試重啓。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章