一、环境介绍:

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;}}

mysql实现读写分离相关推荐

  1. mysql查询并设置高亮_Thinkphp3.2.3设置MySql主从读写分离后,简单调用主数据库查询

    图/文:迷神 Thinkphp是一款不错的国产框架,使用范围广,应用也比较多.随着网站访问增大往往需要使用mysql主从同步功能,本身Thinkphp自带了主从读写分离的功能了. 但是我们经常有一个场 ...

  2. Amoeba实现mysql主从读写分离

    Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...

  3. Centos7源码安装mysql及读写分离,互为主从

       Linux服务器 -源码安装mysql 及读写分离,互为主从   一.环境介绍: Linux版本: CentOS 7 64位 mysq版本: mysql-5.6.26 这是我安装时所使用的版本, ...

  4. MySQL Router实现MySQL的读写分离

    1.简介 MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的SQL proxy. 既然MySQL Router是一个数据库的中间件,那么MySQL Rout ...

  5. mybatis获取mysql源数据类型_spring集成mybatis实现mysql数据库读写分离

    前言 在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈.幸运的是目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库的数据更新同步到另一台服务器上. ...

  6. mysql数据库字段变形_详解如何利用amoeba(变形虫)实现mysql数据库读写分离

    摘要:这篇MySQL栏目下的"详解如何利用amoeba(变形虫)实现mysql数据库读写分离",介绍的技术点是"MySQL数据库.数据库读写分离.amoeba.MySQL ...

  7. mysql proxy 主从_【MYSQL知识必知必会】MySQL主从复制读写分离(基于mysql-proxy实现)...

    MySQL主从复制读写分离(基于mysql-proxy实现) http://mirror.bit.edu.cn/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8. ...

  8. MySQL面试 - 读写分离

    MySQL面试 - 读写分离 面试题 你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题? 面试官心理分析 ...

  9. amoeba实现mysql主从读写分离_利用Amoeba实现MySQL主从复制和读写分离

    在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave) ...

  10. POWERDNS + LVS + LAMP + NFS + MYSQL主从读写分离

    文章目录 client 的配置 路由器的配置 powerdns 的搭建 firewall 的配置 LVS-DR 模式的配置 lvs服务器的配置 web服务器的配置 配置 mysql主从读写分离 MyS ...

最新文章

  1. 复旦大学邱锡鹏教授等「Transformers全面综述」论文
  2. Centos 7.2安装FTP服务并进行相关设置
  3. pythondes加密盒子_PYTHON实现DES加密及base64源码
  4. ZXing二维码扫描添加个人总结
  5. NetBeans Java EE技巧9:从数据库创建JSF应用程序
  6. Android学习笔记——Menu(二)
  7. 图像处理与图像识别笔记(三)图像增强1
  8. 两大图灵奖得主点赞中国用AI检测新冠,AI还能做什么?
  9. LightGBM大战XGBoost,谁将夺得桂冠?
  10. mysql 浮点型详解 简书_MySQL数据类型;基本操作
  11. win10启用php_zip,win10右键没有压缩文件选项怎么办
  12. 防灾科技学院考研计算机,防灾科技学院考研难吗
  13. 国内外程序化交易软件简介
  14. CREO:CREO软件之零件【工具(调查/模型意图/实用工具)】、【视图(可见性/方向/模型显示/显示/窗口)】的简介及其使用方法(图文教程)之详细攻略
  15. c#写windows服务
  16. 【音视频处理】为什么MP3不是无损音乐?音频参数详解,码率、采样率、音频帧、位深度、声道、编码格式的关系
  17. 视频号扩展链接一键转换文章链接
  18. Flash+XML实现电子地图查询及定位功能
  19. 文章分类标签数据库设计
  20. 电商生鲜网站开发(一)——Spring Boot项目开发准备

热门文章

  1. struts.properties属性解释
  2. Blazor University (5)组件 — 字面量、表达式和指令
  3. .NET6之MiniAPI(十九):NLog
  4. 在 Azure Functions 上使用不同的路由前缀
  5. VS2017/2019 F12无法导航到定义
  6. 程序员如何把控自己的职业
  7. .NET Core 2.1 容器镜像将从 Docker Hub 中删除
  8. 大厂出品免费图标资源站
  9. .NET 6 Preview 2 发布
  10. C#多线程和异步(二)——Task和async/await详解