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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 蚁群算法和简要matlab来源

    蚁群算法和简要matlab来源

    2021年12月30日
    46
  • mysql中字符转数字,MYSQL字符数字转换为数字「建议收藏」

    mysql中字符转数字,MYSQL字符数字转换为数字「建议收藏」1、将字符的数字转成数字,比如’0’转成0可以直接用加法来实现例如:将user表中的uid进行排序,可uid的定义为varchar,可以这样解决select*fromuserorderby(uid+0)2、在进行ifnull处理时,比如ifnull(a/b,’0′)这样就会导致a/b成了字符串,因此需要把’0’改成0,即可解决此困扰3、比较数字和varchar时,比如a=11,…

    2022年5月7日
    45
  • mysql修改数据类型_MySQL修改字段类型[通俗易懂]

    mysql修改数据类型_MySQL修改字段类型[通俗易懂]mysql>altertable表名modifycolumn字段名类型。数据库中address表city字段是varchar(30),修改类型可以用(谨慎修改类型,可能会导致原有数据出错)。mysql>altertableaddressmodifycolumncitychar(30);修改长度可以用(修改长度,要保证不短与已有数据,以保证原有数据不出错)m…

    2022年6月11日
    44
  • Spring Cloud微服务实战

    Spring Cloud微服务实战

    2022年3月12日
    60
  • 直读光谱仪分析谱线_频谱分析仪主要有哪几种

    直读光谱仪分析谱线_频谱分析仪主要有哪几种为什么使用频谱仪?01认识频谱电磁频谱,是指按电磁波波长(或频率)连续排列的电磁波族,是一种看不见摸不着但时刻伴随我们的东西。当我们使用电磁波将一串信息发送出去时,在时域上他是一段强度不同,疏密变化的时间信号,在其中的任意时刻,你所能获取的只有他的强度;当我们换个角度,站在频域上来看时,在信号的每一个时刻,你都能看到他从时域的一个点延展成了频域的一个面,你所能获取到的信息量将成倍增加,这有助于我们从中解析出更丰富的内容。因此,电磁频谱的观测,或者说使用频谱仪,我们实际上是换一…

    2022年8月11日
    5
  • Android四大组件Broadcast中注册广播registerReceiver流程源代码详解

    Android四大组件Broadcast中注册广播registerReceiver流程源代码详解在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式就更多了,这样看来,广播机制似乎是多余的。然而,广播机制却是不可替代的,它和Binder机制不一样的地方在于,广播的发送者和接收者事先是不需要知道对方的存在的,这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。在软件工程中,是非常强

    2022年9月11日
    2

发表回复

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

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