结构图如下:
思路:
1 让mysql-proxy服务监听3306端口
2 在后端的数据库服务器1.1与1.2上做用户授权
3 为保证用户能够看到写入的数据,把负责读写操作的数据库服务器做成主从同步的结构
1、数据库服务器读写分离配置
1)开启数据库服务
service mysqld start
2)所有数据库创建库、表结构一致,设置表记录初始值不一样(验证代理是否实现读写分离)
进入IP 1.1与1.2数据库服务器创建库、表结构一致,表记录不一样。
[root@data ~]mysql -uroot -p
mysql> create database test300; //在IP 1.1与1.2上创建相同库
mysql> create table test300.a (id int); //同上创建相同表结构
mysql>insert into test300.a values(1); //IP 1.1插入记录是1
mysql>insert into test300.a values(2); //IP 1.2插入记录是2
3)在两台数据库服务器上分别授权允许代理服务器连接自己
在IP 1.1与1.2上做相同的授权给同一个用户,@地址是匹配所有
mysql>grant all on *.* to proxyuser@’%’identifiedby‘123’;
4)测试授权用户能否从mysql代理服务器访问后端的2台数据库服务器
在代理服务器192.168.1.254上登陆
[root@data ~]mysql -h192.168.1.1 -uproxyuser -p123
[root@file ~]mysql -h192.168.1.2 -uproxyuser -p123
2、安装mysql-proxy并配置
1)mysql-proxy(代理软件)
客户端将请求发给代理,由代理区分读写操作,将读操作发送给从数据库服务器,写操作发送给主数据库服务器
mysql –hmysql-proxy的ip –u用户名 –p密码 //客户端直接访问IP 1.254
2)停止代理服务器的mysql服务,释放3306端口,给mysql-proxy代理软件用
#service mysql stop #chkconfig --level 35 mysql off
安装需要软件包
**linux6中lua,lua-devel已包含在mysql-proxy中
lua-5.0.2-1.el5.rf.i386.rpm
lua-devel-5.0.2-1.el5.rf.i386.rpm
mysql-proxy-0.8.3-linux-rhel5-x86-64bit.tar.gz
mysql-proxy 默认监听3306端口
3)安装提供代理服务的软件mysql-proxy
mysql-proxy软件是用lua语言编写,所以系统上必须安装lua包
[root@dai ~]# rpm -qa | grep lua
lua-devel-5.0.2-1.el5.rf
lua-5.0.2-1.el5.rf
解压mysql-proxy包到指定位置下
[root@seven~]# tar -zxvf mysql-proxy-0.8.3...64bit.tar.gz -C /usr/local/
[root@seven~]# cd /usr/local
[root@sevenlocal]# mv mysql-proxy... mysql-proxy //将文件夹改名,方便访问
/usr/local/mysql-proxy下的文件夹的作用
bin 启动服务脚本
include 头文件
share 功能脚本
lib 库文件
libexec 可执行命令
#ls mysql-proxy/share/doc/mysql-proxy/
rw-splitting.lua //实现读写分离功能的脚本
#ll /usr/local/proxy/share/doc/mysql-proxy/rw-splitting.lua //查看权限限
#chmod +x /usr/local/proxy/share/doc/mysql-proxy/rw-splitting.lua //添加执行权限
4)启动代理服务
格式:./mysql-proxy –P 代理服务器ip:指定端口 -r 读服务器ip:指定端口 -b 写服务器ip:端口 -s(调用执行脚本) /usr/local/mysql-proxy/share/doc/mysql-proxy/ rw-splitting.lua &
说明:&表示后台运行
[root@sevenbin]# /usr/local/mysql-proxy/bin/mysql-proxy \
-P 192.168.1.254:3306 -r 192.168.1.2:3306 -b 192.168.1.1:3306 \
-s /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua &
2014-02-18 14:26:51: (critical) plugin proxy 0.8.3started //出这句代表成功
停止:只能杀进程 #pkill -9 mysql-proxy
杀进程号 #kill 9 %1
5)查看mysql代理服务是否处于运行状态
[root@dai~]# jobs //查看后台是否运行
[1]+ Running /usr/local/mysql-proxy/bin/mysql-proxy-P 192.168.1.254:3306 -r 192.168.1.23:3306 -b 192.168.1.100:3306 -s/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua &
6)测试mysql代理服务器的读写分离功能
**proxy服务器也需创建与1.1、1.2数据库服务器库、表结构一致的库表。
客户端用授权账号连接代理服务器,代理服务器自动连接数据库服务器测试读写分离
# mysql -h192.168.1.254 -uproxyuser -p123
mysql>insert into test300.a vales(100);//因没有到并发数,此时客户端和1.1上都能看到100这条记录。
在客户机上开5或6个终端分别如下操作:
# mysql -h192.168.1.3 -uproxyuser -p123
mysql> select * from test300.a;
当第5或第6个终端的时候,因为达到了并发数,再执行select * from test300.a;语句,只能看到:1.2中的记录,再插入记录后,记录会写入负责写的服务器1.1,客户端将看不到这条记录。
7)若想客户端立马看到,还需将写读的服务器,做成主从服务器
写服务器192.168.1.1:→主服务器
读服务器192.168.1.2:→从服务器
在主服务器上授权从服务器:
# mysql -uroot -p123456
mysql> grant all on *.* to [email protected] identified by ‘123’;
从服务器上登录:
# mysql -h192.168.1.1 -uroot -p123
mysql> select * from test300.a;
此时,客户机上插入记录,1.2上就能立马看到了
8)修改主配置文件—并发数
** 并发数不能设置为0**
#vim /usr/local/mysqlproxy/share/doc/mysql-proxy/rw-splitting.lua
min_idle_connections = 4
max_idle_connections = 8
问答:
1 mysql代理服务器的并发连接达到(4或4+1)个时(区分用户的读写操作)
2 当用户的并发连接数没有超过指定的最小并发连接阀值时,mysql代理服务器如何分发用户的读写请求(主)
3 当用户的并发连接数超过最小并发连接阀值时,是否能否按照启动mysql代理服务时指定的设置分发用 户的读写请求(能)
4 当用户的并发连接数大于4时,区分用户的读写操作,当用户的并发连接数恢复小于最小并发连接数 后,mysql代理服务如何分发用户的读写请求(一旦区分开来,就会一直保持区分)