读写分离和分库分表介绍
首先数据库读写分离时基于主从同步。数据库分为了主数据库和从数据库,主数据库主要完成更新操作,从数据库主要作为读取操作。这样做可以大大提升服务器的效率,减轻主服务器的性能压力。
读写分离适用于读操作大于写操作,服务器读操作性能遇到了瓶颈,此时可以使用读写分离架构,增加从服务器,基于主从同步,将读操作由由从服务器来承担,可以提升主服务器的读操作能力。
读写分离能够解决读性能瓶颈,但并不是最优的。使用读写分离,主从的一致性需要考虑,以及实现高可用,读连接池要实现故障自动转移。业务性增加了开发难度。
分库分表
把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。分库分表有垂直切分和水平切分。
垂直切分:对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分。
水平切分:表并不多,但每张表的数据非常多,这时候适合水平切分。
综上对于分担数据库压力,除了读写分离架构外,还可以使用缓存。缓存也是互联网常用的一种架构,缓存的使用成本远低于使用从数据库。但是缓存挂掉,单个数据库将无法承受巨大的流量。会造成数据库奔溃。
数据库的性能瓶颈常见的是数据库容量的瓶颈,解决此瓶颈最合适的不是缓存和读写分离,是使用分库分表。将数据库切分放在不同服务器上,可以减少服务器压力。
读写分离原理

来自客户端的请求通过中间件mycat执行(出mycat外还有其他中间件能实现此功能),后端的mysql无法查看,通过配置mycat的配置文件,将请求中的写造作送给后端的master数据库,读操作给slave数据库。
读写分离配置
系统:centos7
所用到的服务器地址为:
IP地址:192.168.71.3(win10系统) 装有mysql8.0.25
Ip地址:192.168.71.128 (虚拟机 centos7) 装有mysql8.0.19
192.168.171.129(虚拟机,centos7) mycat节点
Mycat版本:mycat1.6.6.1
Jdk版本:1.8
Mysql版本:mysql8.0.25
1.在server.xml中配置mycat的账号密码
账号:root
密码:123456
逻辑库标签:alan
2.在shema.xml中配置分库分表以及数据库读写分离参数
逻辑库alan切片为alan1和alan2,这两个数据库需要在mysql集群中提前建好。以及建立的表student,也需要在mysql集群中分片库中提前建立好。还要定义分片算法标签,为myrule。
配置读写分离,用于写操作的服务器为主库ip为192.168.171.3,读操作为从库,从库ip为:192.168.71.128。
3.在rule.xml中,配置分库分表切片所用到的算法
所用到的算法为mod-long(平分规则),对应下面的函数。
4.启动mycat
启动方式有:
1.bin/mycat start
2../mycat start
3.给mycat添加环境变量直接使用mycat start
建议使用控制台mycat console启动,可以显示是否启动成功,不成功还能看到启动日志。
5.验证读写分离,分库分表
在装有mysql的主机上登录mycat客户端,mycat的默认端口为:8066,管理端口为9066。我的win10(192.168.71.3)装有mysql8.0.25,登录mycat。
命令为:mysql -uroot -p123456 -h192.168.71.129-P8066 --default_auth=mysql_native_password
注意:对于MySql 8,会报密码错误方式,这是由于Mysql 8的缺省加密方式已经改为caching_sha2_password,而MyCat对此尚不支持。为此,需加上--default_auth=mysql_native_pasowrd,
可以看到登录到了mycat的客户端。Mycat支持标准的SQL语句,使用命令show databases;可查看到所定义的逻辑库alan。
在建立的表中插入数据,则会以mod-long的分片规则平分到alan1和alan2数据库的student表中(主库192.168.71.3),根据主从同步,主库还会将更新操作同步到从库192.168.71.128中。读数据从从库192.168.71.128中读取。




