mysql读写分离优点_mysql读写分离

mysql读写分离优点_mysql读写分离什么是读写分离在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将事务性查询导致的数据变更同步到从库中,也就是写操作。读写分离的好处1)分摊服务器压力,提高机器的系统处理效率读写分离适用于读远比写的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问…

大家好,又见面了,我是你们的朋友全栈君。

什么是读写分离

在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将事务性查询导致的数据变更同步到从库中,也就是写操作。

读写分离的好处

1)分摊服务器压力,提高机器的系统处理效率

读写分离适用于读远比写的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能并不高,而主从只负责各自的写和读,极大程度的缓解X锁和S锁争用;

假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白了就是拿机器和带宽换性能;

2)增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务

什么是  Mycat

是一个开源的分布式数据库系统,但是因为数据库一般都有自己的数据库引擎,而Mycat并没有属于自己的独有数据库引擎,所有严格意义上说并不能算是一个完整的数据库系统,只能说是一个在应用和数据库之间起桥梁作用的中间件。

在Mycat中间件出现之前,MySQL主从复制集群,如果要实现读写分离,一般是在程序段实现,这样就带来了一个问题,即数据段和程序的耦合度太高,如果数据库的地址发生了改变,那么我的程序也要进行相应的修改,如果数据库不小心挂掉了,则同时也意味着程序的不可用,而对于很多应用来说,并不能接受;

引入Mycat中间件能很好地对程序和数据库进行解耦,这样,程序只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务的,大量的通用数据聚合、事务、数据源切换等工作都由中间件来处理;

Mycat中间件的原理是对数据进行分片处理,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成完成的数据库存储,有点类似磁盘阵列中的RAID0.

实现读写分离

准备工作

步骤一:创建数据库

#创建数据库

CREATE DATABASE weibo_simple

步骤二:创建用户表

48304ba5e6f9fe08f3fa1abda7d326ab.png

CREATE TABLE `t_users` (

`user_id` varchar(64) NOT NULL COMMENT ‘注册用户ID’,

`user_email` varchar(64) NOT NULL COMMENT ‘注册用户邮箱’,

`user_password` varchar(64) NOT NULL COMMENT ‘注册用户密码’,

`user_nikename` varchar(64) NOT NULL COMMENT ‘注册用户昵称’,

`user_creatime` datetime NOT NULL COMMENT ‘注册时间’,

`user_status` tinyint(1) NOT NULL COMMENT ‘验证状态 1:已验证 0:未验证’,

`user_deleteflag` tinyint(1) NOT NULL COMMENT ‘删除标记 1:已删除 0:未删除’,

PRIMARY KEY (`user_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

48304ba5e6f9fe08f3fa1abda7d326ab.png

步骤三:创建微博表

48304ba5e6f9fe08f3fa1abda7d326ab.png

CREATE TABLE `t_message` (

`messages_id` varchar(64) NOT NULL COMMENT ‘微博ID’,

`user_id` varchar(64) NOT NULL COMMENT ‘发表用户’,

`messages_info` varchar(255) DEFAULT NULL COMMENT ‘微博内容’,

`messages_time` datetime DEFAULT NULL COMMENT ‘发布时间’,

`messages_commentnum` int(12) DEFAULT NULL COMMENT ‘评论次数’,

`message_deleteflag` tinyint(1) NOT NULL COMMENT ‘删除标记 1:已删除 0:未删除’,

`message_viewnum` int(12) DEFAULT NULL COMMENT ‘被浏览量’,

PRIMARY KEY (`messages_id`),

KEY `user_id` (`user_id`),

CONSTRAINT `t_message_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `t_users` (`user_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

48304ba5e6f9fe08f3fa1abda7d326ab.png

安装mycat

步骤一:解压mycat,不要放在有中文目录的文件夹下

a3b94156ebdee87ee1d077ffb876b076.png

步骤二:修改mycat目录下的conf文件夹中的server.xml文件,配置账户

48304ba5e6f9fe08f3fa1abda7d326ab.png

mycat_master

mycat

mycat_slave

mycat

true

48304ba5e6f9fe08f3fa1abda7d326ab.png

步骤三:配置schema.xml文件

48304ba5e6f9fe08f3fa1abda7d326ab.png

writeType=”0″ dbType=”mysql” dbDriver=”native” switchType=”1″

slaveThreshold=”100″>

select user()

48304ba5e6f9fe08f3fa1abda7d326ab.png

步骤四:配置rule.xml文件

48304ba5e6f9fe08f3fa1abda7d326ab.png

user_id

func1

autopartition-long.txt

48304ba5e6f9fe08f3fa1abda7d326ab.png

步骤五:配置启动日志文件log4j.xml

步骤六:启动mycat,默认端口为8066

master

1a9e78da4354cd679b1eba3ce1974aea.png

master机器上可以进行读写操作

886560d28850f5632765981770f9a990.png

slave

6c7747542ff8c303f5496f7cdb7a2fc4.png

slave机器上可以进行读操作,进行写操作时会报错

5fbd5adf96de4e9fe4479fd7996ca3f3.png

注意注意注意特别注意

1.在使用mycat连接SQLyog时,SQLyog版本不能太低,版本不能太低,不能太低,需要高版本!!!

2.在双击启动mycat时,如果控制台一闪而过,参考方案如下

修改startup_nowrap.bat启动文件,内容如下

“%JAVA_CMD%” -server -Xms512M -Xmx600M -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=1G -DMYCAT_HOME=%MYCAT_HOME% -cp “..\conf;..\lib\*” org.opencloudb.MycatStartup

好文要顶 已关注 收藏该文

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130394.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 面向对象设计大作业——火车售票系统

    面向对象设计大作业——火车售票系统

    2021年10月6日
    64
  • 十五:IO流_什么是io流

    十五:IO流_什么是io流跳转到总目录文章目录01、File类的使用1.1、File类的实例化1.2、File类的常用方法11.3、File类的常用方法21.4、课后练习02、IO流原理及流的分类2.1、IO流原理2.2、流的分类2.3、IO流体系04、节点流(或文件流)4.1、FileReader读入数据的基本操作4.2、FileReader中使用read(char[]cbuf)读入数据4.3、FileWriter写出数据的操作4.4、使用FileReader和FileWriter实现文本文件的复制4.5、使用FileInp

    2022年10月20日
    0
  • 如何编写优秀的单元测试用例「建议收藏」

    如何编写优秀的单元测试用例「建议收藏」优秀单元测试的定义​单元测试:一段自动化的代码,这段代码调用被测试的工作单元,之后对这个工作单元的单个最终结果的某些假设进行检验。单元测试几乎都是用单元测试框架进行编写。单元测试容易编写,快速运行,可自动化,可靠,可读,可维护,结果稳定。  集成测试:对一个工作单元进行的测试,这个测试对被测试的工作单元没有完全的控制,并使用该单元的一个或多个真实依赖物,例如数据库、系统时间、系统文件等  工作单元:从调用系统一个公共方法到产生一个测试可见的最终结果,其间这个系统发生的行为。一个

    2022年6月15日
    37
  • Jquery delegate 在iPhone的safari下有bug

    Jquery delegate 在iPhone的safari下有bug使用delegate注册事件时,iphone的safari不能冒泡到body上,

    2022年10月19日
    0
  • [Java Performance] 数据库性能最佳实践 – JPA缓存

    [Java Performance] 数据库性能最佳实践 – JPA缓存

    2022年1月24日
    32
  • 企业微信发送消息api_微信公众号发消息给用户

    企业微信发送消息api_微信公众号发消息给用户最近,接手了告警的一个需求。详细需求:监控一个应用的某些指标超标了,要提醒用户,通过企业微信给指定用户发送告警信息;今日自己实现了一下,总结出来分享给大家。注意:代码亲自编写,已自测通过文章目录前言一、编码?1.依赖2.SendWX.java3.WeChatMsgSend.java4.WeChatData.java5.WeChatUrlData.java二、参数1.构建自己的企业微信2.参数详细获取总结前言通过企业微信给指定用户发送告警信息一、编码?1.依赖<dependencie

    2022年9月27日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号