mysql实现读写分离

一、环境介绍:

LNMP

vmware workstation pro配置了3个虚拟机,均安装了LNMP环境:

Pro  :192.168.0.105        Pro2:192.168.0.106

Pro3:192.168.0.107      

 

 

二、Mysql主从复制同步的实现

https://blog.csdn.net/m_nanle_xiaobudiu/article/details/81086243

 

三、Mysql读写分离

1、原理

(1)让master数据库处理增删改操作(create、insert、delete,update)。

(2)让slave数据库处理读操作(select)。

注:mysql读写分离的前提是mysql主从复制,这样可以保证在master上修改数据,slave同步后,web应用可以读取到slave端的数据。

2、实现方式

Mysql读写分离可以基于第三方插件,也可以通过后端修改代码实现,具体实现读写分离的常见方式有四种

注:由于插件方式性能较低,且每种插件都有其一定缺点,所以建议在后端做读写分离

(1)Mysql-Proxy 读写分离

(2)Amoeba 读写分离

(3)Mycat 读写分离

(4)基于程序读写分离(推荐)

3、读写分离的实现

 

<?phpclass Db
{private $res;function __construct($sql){$queryStr = strtolower(trim(substr($sql,0,6)));if ($queryStr == 'select') {//如果是查询操作(select),则连接从数据库(slave)$res = $this->slave_select($sql);$this->res = $res;} else {//如果是增删改操作(create、insert、delete,update),则连接主数据库(master)$res=$this->master_excute($sql);$this->res = $res;}}/*** slave从库返回sql查询结果* @param $sql* @return array*/private function slave_select($sql){//该处只是随机获取slave节点的ip,当然,还可以采用其他算法获取slave_ip$slave_server = $this->get_slave_ip();$dsn = "mysql:host=$slave_server;dbname=test";$user = 'root';$pass = '123456';$pdo = new PDO($dsn, $user, $pass);return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);}/*** master主库返回sql执行结果* @param $sql* @return int*/private function master_excute($sql){$master_server = '192.168.0.102';$dsn = "mysql:host=$master_server;dbname=test";$user = 'root';$pass = '123456';$pdo = new PDO($dsn, $user, $pass);return $pdo->exec($sql);}/*** 随机获取slave-ip* @return mixed*/private function get_slave_ip(){$slave_ips = ['192.168.0.104','192.168.0.105','192.168.0.106','192.168.0.107','192.168.0.108'];$count = count($slave_ips)-1;$random_key = mt_rand(0,$count);return $slave_ips[$random_key];}/*** 获取结果* @return int*/public function get_res(){return $this->res;}}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[BZOJ1509][NOI2003]逃学的小孩

1509: [NOI2003]逃学的小孩 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 968 Solved: 489[Submit][Status][Discuss]Description Input 第一行是两个整数N&#xff08;3  N  200000&#xff09;和M&#xff0c;分别表示居住点总数和街道总数。以下M行&#xff0c;每行…

十一随笔|读书

十一放假回老家前三天一直下雨&#xff0c;没法帮父母干农活&#xff0c;阴雨天气农村就闲下来了亲戚间走动&#xff0c;长辈们谈论孩子不好好学习&#xff0c;孩子抱怨学习没用大学毕业照样找不到工作。现在大学生就业现状确实不容乐观&#xff0c;当下不好好学习没有拖底&…

yii之behaviors

BaseController: protected $actions [*];protected $except [];protected $mustlogin [];protected $verbs [];// 行为过滤public function behaviors(){return [access > [class > \yii\filters\AccessControl::className(),only > $this->actions, // 针对哪…

关闭 Visual Studio 2013 的 Browser Link 功能

什么是 Browser Link ? 这个 Browser Link 的功能就是通过一个脚本文件架起流程器和 Visual Studio IDE 之前的一个通信桥梁&#xff0c; 在启用 Browser Link 后&#xff0c; Visual Studio 会给网站注入一个 IHttpModule 模块对象&#xff0c; 然后在每个页面都会注册一段上…

Groove list操作-转数组,collect,each等

2019独角兽企业重金招聘Python工程师标准>>> list转换为数组 List list [a,b,c,d] def strs list as String[] println strs[0] 使用了Groovy语言&#xff0c;就能时不时的感受到Groovy语言在编码风格上与Java语言的不同。当然&#xff0c;我们首先感受到的可能就…

支持多种操作系统的新一代服务主机

一个应用需要常驻操作系统后台服务&#xff0c;可选框架有WindowsServiceLifeTime和SystemdLifeTime&#xff0c;但需要区别对待不同操作系统且需要另外写命令安装。NewLife.Agent自2008年设计以来&#xff0c;一直秉着简单易用的原则&#xff0c;不仅实现了服务框架&#xff0…

c#中的奇异递归模式

奇异递归模式&#xff0c;Curiously Recurring Template Pattern (CRTP) &#xff0c;作用是能使父类中能够使用子类的信息。下面是我对这个问题的分析过程。 按照一般的继承关系&#xff0c;父类是无法访问到子类的&#xff0c;所以很自然的想到了c#中的泛型&#xff0c;将子类…

面试中get和post的区别

get和post的区别主要有以下几方面&#xff1a;1、url可见性&#xff1a; get&#xff0c;参数url可见&#xff1b; post&#xff0c;url参数不可见2、数据传输上&#xff1a; get&#xff0c;通过拼接url进行传递参数&#xff1b; post&#xff0c;通过body体传输参数3、缓存性…

程序猿与线性代数

逛微博&#xff0c;摸到了一堆宝&#xff1a;关于线性代数学习的文章。先是发现了陈晓鸣&#xff08;http://weibo.com/acumon&#xff09;&#xff0c;前百度资深project师&#xff0c;终身学习者。再找到“文艺复兴记”&#xff08;http://weibo.com/weidagang&#xff09;。…

Verilog MIPS32 CPU(八)-- 控制器

Verilog MIPS32 CPU&#xff08;一&#xff09;-- PC寄存器Verilog MIPS32 CPU&#xff08;二&#xff09;-- RegfilesVerilog MIPS32 CPU&#xff08;三&#xff09;-- ALUVerilog MIPS32 CPU&#xff08;四&#xff09;-- RAMVerilog MIPS32 CPU&#xff08;五&#xff09;--…

[翻译]Dapr 长程测试和混沌测试

介绍这是Dapr的特色项目&#xff0c;具体参见&#xff1a;https://github.com/dapr/test-infra/issues/11 &#xff0c;在全天候运行的应用程序中保持Dapr可靠性至关重要。在部署真正的应用程序之前&#xff0c;可以通过在受控的混沌环境中构建&#xff0c;部署和操作此类应用程…

python UDP-数据报协议

基于udp协议通信的套接字 服务端 1 from socket import *2 3 server socket(AF_INET, SOCK_DGRAM) # SOCK_DGRAM>数据报协议4 server.bind((127.0.0.1, 8080))5 6 print(start....)7 while True:8 data, client_addr server.recvfrom(1024) # (bhello, (127.0.0.1, …

Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0

一、问题描述&#xff1a; 在服务器端可以正常连接并操作mysql&#xff0c;但是在windows端使用navicat工具远程ssh连接就出现下面错误。 1、服务器端&#xff1a; 2、windows端navicat连接 3、原因 原来我今天在做主从配置的时候&#xff0c;将 /etc/my.cnf 配置文件中的b…

自定义ProgressBar(圆)

2019独角兽企业重金招聘Python工程师标准>>> <lib.view.progressbar.ColorArcProgressBarandroid:layout_width"match_parent"android:layout_height"220dip"android:id"id/barInterest"android:layout_centerInParent"true&…

C# Task用法详解

概述Task是微软在.Net 4.0时代推出来的&#xff0c;Task看起来像一个Thread&#xff0c;实际上&#xff0c;它是在ThreadPool的基础上进行的封装&#xff0c;Task的控制和扩展性很强&#xff0c;在线程的延续、阻塞、取消、超时等方面远胜于Thread和ThreadPool&#xff0c;所以…

函数调用堆栈图

转载于:https://www.cnblogs.com/DeeLMind/p/7617972.html

jquery运动

在前面封装的move.js框架&#xff0c;在jquery中有同样封装好的功能animate()。使用方法非常类似&#xff0c;下面我们看看animate的使用方法&#xff0c;有了原生的运动方法&#xff0c;然后再使用jquery的运动方法就会变得非常简单。 animate()语法 $(selector).animate({par…

Session的原理,大型网站中Session方面应注意什么?

一、Session和Cookie的区别 Session是在服务器端保持会话数据的一种方法&#xff08;通常用于pc端网站保持登录状态&#xff0c;手机端通常会使用token方式实现&#xff09;&#xff0c;存储在服务端。 Cookie是在客户端保持用户数据&#xff0c;存储位置是客户端&#xff08…

MySQL5.5读写分离之mysql-proxy

通常一个网站在初期访问量都比较小&#xff0c;所以一般的小架构足以支撑。但是&#xff0c;当网站逐渐发展起来后&#xff0c;随之而来的是大量的访问&#xff0c;这时候最先出现的瓶颈就是数据库了。因为数据的写入读取操作&#xff08;I/O&#xff09;是集群中响应速度最慢的…

两圆相交求面积 hdu5120

转载 两圆相交分如下集中情况&#xff1a;相离、相切、相交、包含。 设两圆圆心分别是O1和O2&#xff0c;半径分别是r1和r2&#xff0c;设d为两圆心距离。又因为两圆有大有小&#xff0c;我们设较小的圆是O1。 相离相切的面积为零&#xff0c;代码如下&#xff1a; [cpp] view …