文章目錄
-
- 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
步驟二:建立一個配置檔案的目錄,建立配置檔案
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 ##打入背景
步驟三:修改資料庫發生讀寫分離時的最大和最小連接配接數
把原來的4和8改為1和2,預設超過4個連接配接才會啟動讀寫分離,改為2個便于測試。
vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
步驟四:建立日志檔案和程序pid檔案所在的目錄
[[email protected] mysql-proxy]# cd /usr/local/mysql-proxy/
[[email protected] mysql-proxy]# ls
[[email protected] mysql-proxy]# mkdir log建立目錄,存放程序pid和日志
步驟五:啟動mysql-proxy
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
此時報錯:
- 原因: 配置檔案權限過大
- 更改方法: 修改檔案權限
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
再次啟動
步驟六:檢視日志
cd /usr/local/mysql-proxy/log/
ls
mysql-proxy.log mysql-proxy.pid
cat mysql-proxy.log ##檢視日志
此時可以看到兩個節點都加進來了,server3的proxy配置完成!!
測試
步驟一:實體機中安裝mariadb
步驟二:在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; #檢視表結構
步驟三:server3安裝lsof
yum install lsof
步驟四:在實體機上,打開一個shell以drn使用者來連接配接資料庫
多開實體機然後連接配接一次在server3上losf -i 3306一次,直到出現server2(發現開始讀寫分離(使用者多的時候))
步驟五:在server3上,用lsof指令對mysql的端口3306進行監測,列出誰在使用3306端口:lsof -i:3306
我們在實體機上再打開兩個shell來連接配接資料庫,就可以看到 前兩次的連接配接都指向server1,第三次的連接配接指向server2,說明啟動了讀寫分離。
步驟六:在實體機上,插入資料
MySQL [nn]> insert into userinfo values ('okokj','75156321');
MySQL [nn]> select * from userinfo;
此時slave被關閉
此時slave被打開