靜態分離:直接將服務器地址寫入程序mysql
優勢:
缺點:
動態分離:經過代理服務器進行讀寫操做,由代理服務器斷定讀寫操做,在主服務器上寫數據,在從服務器上讀數據。
linux
(代理服務器不須要安裝Mysql)sql
#=======================================================數據庫
(1)使用mysql-proxy實現讀寫分離vim
# iptables -F服務器
(master,slave,proxy,client服務器各一臺)ide
注意:(首先進行主從複製配置。而後開始在代理服務器上使用mysql-proxy進行讀寫分離。最後在客戶端測試)測試
代理服務器進行的操做(10.0.199.3):lua
# tar -xvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
spa
# mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy
# vim /etc/ld.so.conf
/usr/local/mysql-proxy/lib (導入)
# cd /usr/local/mysql-proxy/bin
# ./mysql-proxy --proxy-backend-addresses=10.0.199.1:3306 --proxy-read-only-backend-
addresses=10.0.199.2:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon --user=mysql --log-level=warning --log-file=/var/log/mysql-proxy.log --max-open-files=2048 --event-threads=4 --proxy-address=10.0.199.3:3306
解釋:
--proxy-backend-addresses 指定主服務器地址(寫數據) 10.0.199.1
--proxy-read-only-backend-addresses 指定從服務器地址(讀數據) 10.0.199.2
--proxy-lua-script 指定用於讀寫分離的腳本程序
--daemon 指定以守護進程的方式運行
--user=mysql 指定運行的用戶
--log-level 指定日誌記錄級別
--log-file 指定日誌文件位置
--max-open-files 指定最大課打開的文件數,受操做系統限制
--event-threads 設置工做線程數
--proxy-address 設置監聽的本機地址和端口 10.0.199.3(代理服務器)
# lsof -i:3306 查看是否啓動
主從服務器進行的操做(199.一、199.2):
# iptables -F
在主從服務器上對代理服務器進行受權,使代理服務器可以使用主從服務器上的此用戶進行鏈接主從。
mysql> grant all on *.* to 'repuser'@'10.0.199.3' identified by 'aixocm';
mysql> flush privileges;
repuser是任意用戶名 須要在代理服務器上建立該用戶
由於下面在客戶端進行測試時,須要用被受權的用戶即該用戶進行登陸操做數據庫 mysql> create user repuser;
客戶端進行的操做(10.0.199.4):
測試:
客戶端沒必要安裝Mysql,可是必需要有mysql命令
# yum install mysql
# mysql -u repuser -h 10.0.199.3 -paixocm -e "select * from sxkj.stu"
# mysql -u repuser -h 10.0.199.3 -paixocm -e "create table sxkj.class(id int primary key,name varchar(10) not null)"
也能夠進入mysql進行操做
再查看主從服務器數據
測試時 若出現如下錯誤:
解決辦法:
在主從服務器上:mysql> select user,host,password from mysql.user;
mysql> drop user zll@10.0.199.3; 而後再從新進行受權。