先说一下什么是读写分离吧。

以三台虚拟机为例,搭建一主一从一代理,全部配置好之后,当从proxy插入数据时,该数据会同时插入主数据库,因为主从关系,从数据库也会有数据。当把从数据库执行slave stop后,再次从proxy插入数据,数据只会插入主数据库,从数据库不会增加新数据。当在slave上插入数据时,主数据库不会增加新数据,但是proxy会读取到slave上新插入的数据。

简单来说就是,proxy将数据插入主数据库,读取数据时却是从从数据库读取。

下面开始说一下部署步骤:

主数据库:172.16.1.111

从数据库:172.16.1.112

MySQLProxy:172.16.1.110

主从配置,请参阅以下文章,我使用的用于同步的用户名为repl,密码为repl

http://www.cnblogs.com/biaopei/p/7730567.html

MySQLProxy下载地址https://downloads.mysql.com/archives/proxy/

做好安装MySQLProxy准备

解压文件

groupadd mysql
useradd -g mysql mysql
并且把解压后的整个文件夹所有者改为mysql,进入到文件夹内的bin目录
建议将rw-splitting.lua配置文件稍微修改一下,改以下两个参数就可以,因为,MySQLProxy默认是要达到4个连接才开启读写分离功能(具体我还不是很了解)

min_idle_connections = 1,
max_idle_connections = 2,

以下命令需要根据自己的实际情况修改,例如ip地址还有文件的路径,其它就没什么了

./mysql-proxy --daemon --log-level=debug --user=mysql --keepalive --log-file=/var/log/mysql
-proxy.log --plugins="proxy" --proxy-backend-addresses="172.16.1.111:3306" --proxy-read-only-backend-addresses="172.16.1.112:3306" --proxy-lua-script="/root/mysqlproxy/share/doc/mysql-proxy/rw-splitting.lua" --plugins=admin --admin-username="admin" --admin-password="admin" --admin-lua-script="/root/mysqlproxy/lib/mysql-proxy/lua/admin.lua"

启动MySQLProxy后,查看一下4040和4041端口是否已开启,如果已开启,说明是正常的
在MySQLProxy上执行以下命令
先检查一下代理是否成功(我们可以在master上新建一个库,如果这里能够看到,说明代理没问题)

mysql -urepl -p -h 172.16.1.110 --port=4040    #密码是repl,如果你没改的话,bp库是我在master上创建的

现在我们再看一下状态是否正确
mysql -uadmin -p -h 172.16.1.110 --port=4041   #默认密码是admin,如图,我们在这里还会遇到一个问题

解决方法是,新开一个终端登录proxy,执行

mysql -urepl -p -h 172.16.1.110 --port=4040

再次查看,两个都为up说明,配置正确

现在我们就完成配置了,接下来开始测试读写分离功能

很简单,就是从proxy上登录

mysql -urepl -p -h 172.16.1.110 --port=4040

然后创建一个数据库,查看主从数据库,都会看到在proxy增加的新数据库

接着,我们从数据库执行slave stop后,再在proxy上新建一个数据库,发现只有master上能看到,slave上看不到,这不是重点,重点是在slave上新建一个数据库,在master上看不到,但proxy能读取到新增的数据库。

至此读写分离就完成了。

注意这里也必须重新开一终端连接proxy才会实现读写分离,如果使用同一个终端,会导致slave stop后,proxy的读写全部都是在master上,没有读写分离。还有就是,登录的时候直接回车即可,无需再输入密码,不知道是什么原因

(我个人觉得,slave 没有stop前,proxy读取的数据应该也是直接从slave上读取的)

如果看不懂的,可以参考一下https://www.2cto.com/database/201607/531145.html

使用mysqlproxy实现mysql读写分离的更多相关文章

  1. Mysql-Proxy实现mysql读写分离、负载均衡 (转)

    在mysql中实现读写分离.负载均衡,用Mysql-Proxy是很容易的事,不过大型处理对于性能方面还有待提高,主要配置步骤如下: 1.1. mysql-proxy安装 MySQL Proxy就是这么 ...

  2. Windows中使用Mysql-Proxy实现Mysql读写分离

    1.简介 读写分离:当业务量上来时,往往一台单机的mysql数据库不能满足性能需求,这时候就需要配置主从库读写分离来解决性能瓶颈.简单的来说,就是原先一台数据库既读又写,现在改成一台写和1台以上读. ...

  3. [记录]MySQL读写分离(Atlas和MySQL-proxy)

    MySQL读写分离(Atlas和MySQL-proxy) 一.阿里云使用Atlas从外网访问MySQL(RDS) (同样的方式修改配置文件可以实现代理也可以实现读写分离,具体看使用场景) 1.在跳板机 ...

  4. Mysql读写分离(mysql-proxy)

    MySQL-Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载平衡,故障.查询分析,查询过滤 ...

  5. 转:Mysql读写分离实现的三种方式

    1 程序修改mysql操作类可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求.优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配缺点:自 ...

  6. 使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置

    参考博文: MySQL-(Master-Slave)配置  本人按照博友北在北方的配置已成功  我使用的是 mysql5.6.27版本. 使用Atlas实现MySQL读写分离 数据切分——Atlas读 ...

  7. MySQL读写分离技术

    1.简介 当今MySQL使用相当广泛,随着用户的增多以及数据量的增大,高并发随之而来.然而我们有很多办法可以缓解数据库的压力.分布式数据库.负载均衡.读写分离.增加缓存服务器等等.这里我们将采用读写分 ...

  8. mysql读写分离总结

    随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应用于很多大型网站,这个技 ...

  9. Mysql读写分离方案-Amoeba环境部署记录

    Mysql的读写分离可以使用MySQL Proxy,也可以使用Amoeba.Amoeba(变形虫)项目是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项 ...

随机推荐

  1. ES5 map循环一大坑:循环遍历竟然出现逗号!

    一.map map大法好 这里需要解释一下Map和forEach的区别 一般来说需要返回值时使用Map,而只需要循环的使用forEach map循环常用的一些方法 /********* ES6 *** ...

  2. maven eclipse配置 创建项目

    下载maven jar 可以去官网http://maven.apache.org/ 或者我的百度云http://download.csdn.net/detail/taopeng_100/9894787 ...

  3. 《Visual C# 从入门到精通》第三章使用判断语句——读书笔记

    第3章 使用判断语句 3.1 使用布尔操作符 布尔操作符是求值为true或false的操作符. C#提供了几个非常有用的布尔操作符,其中最简单的是NOT(求反)操作符,它用感叹号(!)表示.!操作符求 ...

  4. EF Core

    一个事务中    先在数据库查出一条数据进行修改      然后在进行查询  他会直接在内存中找到这条数据  不会再数据库查询了 EF Core的 linq语句中可以使用C#方法或函数   在EF6或 ...

  5. MySQL中case then用法

    1.查询图书价格,若价格为null,则显示unknown,若价格为10到20, 则显示10 to 20 SELECT price, CASE WHEN price='null' THEN 'UnKno ...

  6. Python 条件控制

    Python  条件控制 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: if 语句 Python中if语 ...

  7. js的缓存

    无网络的情况下,使用静态资源呈现页面的方法,只有h5的manifest 有网的情况下(可以连接到服务器的情况下),有3种判断缓存的方式. ------------------------------- ...

  8. java ----> 注解/反射

    注解 一个例子,摘自Junit-4.12.jar源码. 1 @Retention(RetentionPolicy.RUNTIME) 2 @Target({java.lang.annotation.El ...

  9. 主机连接虚拟机redis 服务器

    1. centos 虚拟机安装redis sudo yum install epel-release sudo yum update sudo yum install redis sudo syste ...

  10. coursera-斯坦福-机器学习-吴恩达-笔记week4

    1 神经网络的提出 线性回归和逻辑回归能很好的解决特征变量较少的问题,但对于变量数量增加的复杂非线性问题,单纯增加二次项和三次项等特征项的方法计算代价太高. 2 神经网络算法 2.1 神经元 模拟神经 ...