,接下来,使用mysql-proxy进行读写分离。
1、环境:
局域网内有三台电脑,使用xampp开发,所以:
master :
ip: 10.0.50.195 ; mysql: 5.3.7 ;
slave :
ip: 10.0.50.162 ; mysql: 5.3.7
mysql-proxy :
ip: 10.0.50.206 ; mysql: 5.3.7
2、读写分离
首先,分别登录master,slave服务器,进入mysql,创建
mysql> grant all on *.* to 'proxy2'@'%' identified by '123456';
创建帐户给mysql-proxy链接使用。
2.1、上网下载mysql-proxy安装包,解压后目录:
2.2、为mysql-proxy建立配置文件
如,在 /mysql-proxy/bin/ 下创建新配置文件 mysql-proxy.conf ,内容:
脚本参数详解:
==============================================admin-username=proxy2 //定义内部管理服务器账号
admin-password=123456 //定义内部管理服务器密码 proxy-read-only-backend-addresses=10.0.50.162:3306 //定义后端只读从服务器地址 proxy-backend-addresses=10.0.50.195:3306 //定义后端主服务器地址 admin-lua-script=/mysql-proxy/lib/mysql-proxy/lua/admin.lua //定义lua管理脚本路径 proxy-lua-script=/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua //定义lua读写分离脚本路径log-file=/mysql-proxy/log/mysql-proxy.log //定义log日志文件路径,没有就创建
log-level=warning //定义log日志级别,由高到低分别有(error|warning|info|message|debug)
keepalive //使进程在异常关闭后能够自动恢复
==============================================
2.3、修改读写分离脚本rw-splitting.lua
文件在/mysql-proxy/share/doc/mysql-proxy/下,修改内容:
proxy.global.config.rwsplit = { min_idle_connections = 1, //默认为4 max_idle_connections = 1, //默认为8 is_debug = false }修改完成后,启动mysql-proxy
mysql-proxy --defaults-file=C:/mysql-proxy/bin/mysql-proxy.conf
注意,mysql-proxy默认启动的是4040端口。
2.4、测试读写分离效果
2.4.1、读写分离的数据库连接用户,在上面已经创建好了,若没有再建一次
mysql> grant all on *.* to 'proxy2'@'%' identified by '123456';
2.4.2、为了清晰看到读写分离效果,暂时关闭mysql主从复制功能
登录slave服务器,进入mysql,执行
mysql> stop slave;
2.4.3、在mysql-proxy服务器10.0.50.206,连接mysql-proxy
mysql -uproxy2 -p123456 -P4040 -h10.0.50.206
往master_slave数据库的users表里,插入数据。
insert into users (name) values ('cc')
进入master服务器查询,有该数据:
进入slave服务器查询,没有该数据:
进入mysql-proxy服务器查询,没有该数据:
则,可知,数据插入master了,由于读操作查询slave,所已也没有。
进入slave服务器,执行:mysql> start slave;
则,slave数据会同步,cc数据就进来了:
进入mysql-proxy服务器查询,也有该数据:
3、客服端代码
<?php
$mysqli = mysqli_init(); $mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间//连接的是proxy
$mysqli->real_connect('10.0.50.206:4040', 'proxy2', '123456', 'master_slave');//$sql = "insert into users(`name`) values('cc2')";
//$sql = "update users set name = 'cc22' where name = 'cc2'"; //$rst = $mysqli->query($sql); //var_dump($rst);$sql = "select * from users where id=2";
$result = $mysqli->query($sql); #依次获取字段的信息 while($row = $result->fetch_assoc()) { var_dump($row); } ?>