静态分离:直接将服务器地址写入程序
优点:
缺点:
动态分离:通过代理服务器进行读写操作,由代理服务器判定读写操作,在主服务器上写数据,在从服务器上读数据。
(代理服务器不需要安装Mysql)
#=======================================================
(1)使用mysql-proxy实现读写分离
# iptables -F
(master,slave,proxy,client服务器各一台)
注意:(首先进行主从复制配置。然后开始在代理服务器上使用mysql-proxy进行读写分离。最后在客户端测试)
代理服务器进行的操作(10.0.199.3):
# tar -xvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
# 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.1、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; 然后再重新进行授权。