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;}}
mysql实现读写分离相关推荐
- mysql查询并设置高亮_Thinkphp3.2.3设置MySql主从读写分离后,简单调用主数据库查询
图/文:迷神 Thinkphp是一款不错的国产框架,使用范围广,应用也比较多.随着网站访问增大往往需要使用mysql主从同步功能,本身Thinkphp自带了主从读写分离的功能了. 但是我们经常有一个场 ...
- Amoeba实现mysql主从读写分离
Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...
- Centos7源码安装mysql及读写分离,互为主从
Linux服务器 -源码安装mysql 及读写分离,互为主从 一.环境介绍: Linux版本: CentOS 7 64位 mysq版本: mysql-5.6.26 这是我安装时所使用的版本, ...
- MySQL Router实现MySQL的读写分离
1.简介 MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的SQL proxy. 既然MySQL Router是一个数据库的中间件,那么MySQL Rout ...
- mybatis获取mysql源数据类型_spring集成mybatis实现mysql数据库读写分离
前言 在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈.幸运的是目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库的数据更新同步到另一台服务器上. ...
- mysql数据库字段变形_详解如何利用amoeba(变形虫)实现mysql数据库读写分离
摘要:这篇MySQL栏目下的"详解如何利用amoeba(变形虫)实现mysql数据库读写分离",介绍的技术点是"MySQL数据库.数据库读写分离.amoeba.MySQL ...
- mysql proxy 主从_【MYSQL知识必知必会】MySQL主从复制读写分离(基于mysql-proxy实现)...
MySQL主从复制读写分离(基于mysql-proxy实现) http://mirror.bit.edu.cn/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8. ...
- MySQL面试 - 读写分离
MySQL面试 - 读写分离 面试题 你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题? 面试官心理分析 ...
- amoeba实现mysql主从读写分离_利用Amoeba实现MySQL主从复制和读写分离
在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave) ...
- POWERDNS + LVS + LAMP + NFS + MYSQL主从读写分离
文章目录 client 的配置 路由器的配置 powerdns 的搭建 firewall 的配置 LVS-DR 模式的配置 lvs服务器的配置 web服务器的配置 配置 mysql主从读写分离 MyS ...
最新文章
- 复旦大学邱锡鹏教授等「Transformers全面综述」论文
- Centos 7.2安装FTP服务并进行相关设置
- pythondes加密盒子_PYTHON实现DES加密及base64源码
- ZXing二维码扫描添加个人总结
- NetBeans Java EE技巧9:从数据库创建JSF应用程序
- Android学习笔记——Menu(二)
- 图像处理与图像识别笔记(三)图像增强1
- 两大图灵奖得主点赞中国用AI检测新冠,AI还能做什么?
- LightGBM大战XGBoost,谁将夺得桂冠?
- mysql 浮点型详解 简书_MySQL数据类型;基本操作
- win10启用php_zip,win10右键没有压缩文件选项怎么办
- 防灾科技学院考研计算机,防灾科技学院考研难吗
- 国内外程序化交易软件简介
- CREO:CREO软件之零件【工具(调查/模型意图/实用工具)】、【视图(可见性/方向/模型显示/显示/窗口)】的简介及其使用方法(图文教程)之详细攻略
- c#写windows服务
- 【音视频处理】为什么MP3不是无损音乐?音频参数详解,码率、采样率、音频帧、位深度、声道、编码格式的关系
- 视频号扩展链接一键转换文章链接
- Flash+XML实现电子地图查询及定位功能
- 文章分类标签数据库设计
- 电商生鲜网站开发(一)——Spring Boot项目开发准备
热门文章
- struts.properties属性解释
- Blazor University (5)组件 — 字面量、表达式和指令
- .NET6之MiniAPI(十九):NLog
- 在 Azure Functions 上使用不同的路由前缀
- VS2017/2019 F12无法导航到定义
- 程序员如何把控自己的职业
- .NET Core 2.1 容器镜像将从 Docker Hub 中删除
- 大厂出品免费图标资源站
- .NET 6 Preview 2 发布
- C#多线程和异步(二)——Task和async/await详解