讀寫分離適合於讀特別多的場景,一臺只寫,一臺只讀,提升讀的效率。mysql
前提:linux
讀寫分離創建在兩臺機器上,而且這兩臺機器是作了主從複製的,主庫只寫,從庫只讀,從而實現的。sql
實現:vim
第一種:後端
在主庫建立一個只寫的用戶,而從庫建立一個只寫的用戶,讓程序去鏈接不一樣的服務器可達到讀寫分離的效果。服務器
第二種:ide
經過代理軟件,這種的好處是程序不須要關心寫和讀的操做分別鏈接的哪臺服務器,只管往代理機器發便可,代理軟件進行判斷髮往不一樣的mysql服務器。測試
經過代理實現的軟件有:mysql-proxy,amoebalua
圖解:spa
環境:
須要開三臺機器。
192.168.101 # 主庫-只寫
192.168.102 # 從庫-只讀
192.168.100 # 代理
# 這個是mysql-proxy須要的
官方下載地址:
http://www.lua.org/ftp/
(1)安裝依賴 yum install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make readline-devel -y (2)下載包 wget http://www.lua.org/ftp/lua-5.3.5.tar.gz -P /opt/ (3)解壓包 cd /opt/ tar xf lua-5.3.5.tar.gz (4)修改Makefile文件 cd /opt/lua-5.3.5/ vi Makefile # 設置 INSTALL_TOP= /usr/local/lua (5)編譯 make linux && make install (6)添加環境變量 vim /etc/profile 添加: export LUA_HOME=/usr/local/lua export PATH=$PATH:$LUA_HOME/bin 環境變量生效: source /etc/profile
(1) 下載mysql-proxy包
wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -P /opt/
(2) 解壓包和建立軟鏈接
tar xf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy085
(3) 建立logs目錄
mkdir /opt/mysql-proxy085/logs
(4) 添加環境變量
echo "PATH=/opt/mysql-proxy085/bin/:$PATH" >> /etc/profile
source /etc/profile
(5) 配置代理文件
vim /etc/mysql-proxy.cnf
配置內容:
[mysql-proxy] # 運行mysql-proxy用戶 user=root # mysql-proxy鏈接後端mysql服務器的用戶 admin-username=mysql_proxy_user # mysql-proxy鏈接後端mysql服務器的密碼 admin-password=123456 # 代理的監聽地址端口,默認端口4040 proxy-address=0.0.0.0:3307 #指定後端主master寫入數據 proxy-backend-addresses=192.168.1.101:3306 #指定後端從slave讀取數據 proxy-read-only-backend-addresses=192.168.1.102:3306 #指定讀寫分離配置文件位置 proxy-lua-script=/opt/mysql-proxy085/share/doc/mysql-proxy/rw-splitting.lua #日誌位置 log-file=/opt/mysql-proxy085/logs/mysql-proxy.log #定義log日誌級別,由高到低分別有(error|warning|info|message|debug) log-level=debug #以守護進程方式運行 daemon=true #mysql-proxy崩潰時,嘗試重啓 keepalive=true
# 配置參數自行修改
(6) 修改配置文件權限
chmod 660 /etc/mysql-proxy.cnf
(7) 主庫添加受權用戶
grant all privileges on *.* to 'mysql_proxy_user'@'192.168.1.%' identified by '123456';
flush privileges;
(8) 啓動代理
mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
(9) 鏈接經過代理帳戶鏈接代理開啓的ip及端口
注:前提你鏈接的這臺機器得弄個mysql客戶端
# 測試的話:mysql包解壓了,添加環境變量便可
# 後端的話:直接經過模塊就鏈接1.100機器3307端口便可
mysql -umysql_proxy_user -p123456 -h192.168.1.100 --port=3307
(10) 成功
注:lua是必需要安裝的
試驗結果:
注:寫操做,主從兩臺機器都會操做,由於他們是主從複製的。
想要看出效果須要修改lua腳本,由於它有限制(表示多少鏈接纔開啓讀寫分離):
vim /opt/mysql-proxy085/share/doc/mysql-proxy/rw-splitting.lua
# min_idle_connnections參數表示最少多少個鏈接,纔開始讀寫分離
查詢讀寫次數的sql語句:
show global status where Variable_name in('com_select','com_insert','com_delete','com_update');
show global staus like 'com_select'; # 單個的