静态分离:直接将服务器地址写入程序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; 而后再从新进行受权。