天天看點

linux企業實戰 --MySQL資料庫之讀寫分離

文章目錄

    • 1. MySQL讀寫分離
    • 2. MySQL-proxy實作讀寫分離

1. MySQL讀寫分離

Mysql的主從複制和Mysql的讀寫分離兩者有着緊密聯系。

  • 首先部署主從複制,隻有主從複制完了,才能在此基礎上進行資料的讀寫分離。Master資料庫處理事務性增、删除、修改、更新操作(CREATE、INSERT、UPDATE、DELETE),而讓Slave資料庫處理SELECT操作。
  • MYSQL讀寫分離前提是基于MYSQL主從複制,這樣可以保證在Master上修改資料,Slave同步之後,WEB應用可以讀取到Slave端的資料。
  • 簡單來說,讀寫分離就是隻在主伺服器上寫,隻在從伺服器上讀。
  • 基本的原理是讓主資料庫處理事務性查詢,而從資料庫處理select查詢,資料庫複制被用來把事務性查詢導緻的改變更新同步到叢集中的從資料庫

2. MySQL-proxy實作讀寫分離

實驗環境

主機名 IP 伺服器
server1 172.25.42.1 master mysqld
server2 172.25.42.2 slave mysqld
server3 172.25.42.3 mysql-proxy 相當于代理
實體機 172.25.42.250 測試

基于gtid的異步複制(主從複制)。在server3上面:搭建proxy代理伺服器(實作用戶端寫在server1上面、用戶端讀server2上的資料)

步驟一:解壓mysql-proxy的tar包到/usr/local,做軟連接配接

tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/   加壓到指定目錄下
ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy  
           
linux企業實戰 --MySQL資料庫之讀寫分離

步驟二:建立一個配置檔案的目錄,建立配置檔案

cd /usr/local/mysql-proxy
mkdir conf
cd conf/
vim mysql-proxy.conf      ##編寫服務的配置檔案

[mysql-proxy]
proxy-address=0.0.0.0:3306    ##mysql-proxy運作的端口
proxy-read-only-backend-addresses=172.25.42.2:3306   ##slave節點:隻讀
proxy-backend-addresses=172.25.42.1:3306    ##master節點:可讀可寫
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua   ##lua腳本的路徑
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid 程序pid的位置
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log    ##日志位置
plugins=proxy
log-level=debug    ##定義日志級别
keepalive=true     ##mysql-proxy崩潰時嘗試重新開機
daemon=true        ##打入背景
           
linux企業實戰 --MySQL資料庫之讀寫分離
linux企業實戰 --MySQL資料庫之讀寫分離

步驟三:修改資料庫發生讀寫分離時的最大和最小連接配接數

把原來的4和8改為1和2,預設超過4個連接配接才會啟動讀寫分離,改為2個便于測試。

vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
           
linux企業實戰 --MySQL資料庫之讀寫分離
linux企業實戰 --MySQL資料庫之讀寫分離

步驟四:建立日志檔案和程序pid檔案所在的目錄

[[email protected] mysql-proxy]# cd /usr/local/mysql-proxy/
[[email protected] mysql-proxy]# ls
[[email protected] mysql-proxy]# mkdir log建立目錄,存放程序pid和日志
           
linux企業實戰 --MySQL資料庫之讀寫分離

步驟五:啟動mysql-proxy

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
           
linux企業實戰 --MySQL資料庫之讀寫分離

此時報錯:

  • 原因: 配置檔案權限過大
  • 更改方法: 修改檔案權限
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
           

再次啟動

linux企業實戰 --MySQL資料庫之讀寫分離

步驟六:檢視日志

cd /usr/local/mysql-proxy/log/
ls
mysql-proxy.log  mysql-proxy.pid
cat mysql-proxy.log ##檢視日志
           
linux企業實戰 --MySQL資料庫之讀寫分離
linux企業實戰 --MySQL資料庫之讀寫分離

此時可以看到兩個節點都加進來了,server3的proxy配置完成!!

測試

步驟一:實體機中安裝mariadb

linux企業實戰 --MySQL資料庫之讀寫分離

步驟二:在server1上面:建立新的使用者并且授權

mysql -uroot -pDrn+19961126

mysql> grant insert,update,select on *.* to drn@'%' identified by 'Drn+19961126'; 			#建立一個使用者并對他授權
mysql> flush privileges;	#重新整理授權表
mysql> use nn;
mysql> create table userinfo (
    -> username varchar(10) not null,
    -> password varchar(15) not null);
mysql> desc userinfo; 		#檢視表結構
           
linux企業實戰 --MySQL資料庫之讀寫分離

步驟三:server3安裝lsof

yum install lsof
           
linux企業實戰 --MySQL資料庫之讀寫分離
linux企業實戰 --MySQL資料庫之讀寫分離

步驟四:在實體機上,打開一個shell以drn使用者來連接配接資料庫

多開實體機然後連接配接一次在server3上losf -i 3306一次,直到出現server2(發現開始讀寫分離(使用者多的時候))

步驟五:在server3上,用lsof指令對mysql的端口3306進行監測,列出誰在使用3306端口:lsof -i:3306

linux企業實戰 --MySQL資料庫之讀寫分離

我們在實體機上再打開兩個shell來連接配接資料庫,就可以看到 前兩次的連接配接都指向server1,第三次的連接配接指向server2,說明啟動了讀寫分離。

步驟六:在實體機上,插入資料

MySQL [nn]> insert into userinfo values ('okokj','75156321'); 
MySQL [nn]> select * from userinfo;
           

此時slave被關閉

linux企業實戰 --MySQL資料庫之讀寫分離
linux企業實戰 --MySQL資料庫之讀寫分離
linux企業實戰 --MySQL資料庫之讀寫分離

此時slave被打開

linux企業實戰 --MySQL資料庫之讀寫分離