mysql读写分离_Mysql的主从复制与读写分离

19a53128e774e9c814dac00c6edd6d5f.png

主从复制

6fa906982dabaaeb2bf5c96c4c04d341.png

概念

影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。

假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。

MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成。

那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。

在上面的模型中,MYSQL-A就是主服务器,即master,MYSQL-B就是从服务器,即slave。

日志系统A,其实它是MYSQL的日志类型中的二进制日志,也就是专门用来保存修改数据库表的所有动作,即bin log。【注意MYSQL会在执行语句之后,释放锁之前,写入二进制日志,确保事务安全】

日志系统B,并不是二进制日志,由于它是从MYSQL-A的二进制日志复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log。

可以发现,通过上面的机制,可以保证MYSQL-A和MYSQL-B的数据库数据一致,但是时间上肯定有延迟,即MYSQL-B的数据是滞后的。

【即便不考虑什么网络的因素,MYSQL-A的数据库操作是可以并发的执行的,但是MYSQL-B只能从relay log中读一条,执行下。因此MYSQL-A的写操作很频繁,MYSQL-B很可能跟不上。】

解决问题

数据如何不被丢失

备份

读写分离

数据库负载均衡

高可用

环境搭建

  1. 准备环境

两台windows操作系统 ip分别为: 172.27.185.1(主)、172.27.185.2(从)

  1. 连接到主服务(172.27.185.1)服务器上,给从节点分配账号权限。

GRANT REPLICATION SLAVE ON *.* TO 'root'@'172.27.185.2' IDENTIFIED BY 'root';

  1. 在主服务my.ini文件新增
server-id=200log-bin=mysql-binrelay-log=relay-binrelay-log-index=relay-bin-index
server-id=200log-bin=mysql-binrelay-log=relay-binrelay-log-index=relay-bin-index
server-id=200log-bin=mysql-binrelay-log=relay-binrelay-log-index=relay-bin-index
server-id=200log-bin=mysql-binrelay-log=relay-binrelay-log-index=relay-bin-index

重启mysql服务

  1. 在从服务my.ini文件新增
server-id = 210replicate-do-db =itmayiedu #需要同步数据库
server-id = 210replicate-do-db =itmayiedu #需要同步数据库

重启mysql服务

  1. 从服务同步主数据库
stop slave;changemaster to master_host='172.27.185.1',master_user='root',master_password='root';start slave;show slave status;
stop slave;changemaster to master_host='172.27.185.1',master_user='root',master_password='root';start slave;show slave status;
stop slave;changemaster to master_host='172.27.185.1',master_user='root',master_password='root';start slave;show slave status;
stop slave;changemaster to master_host='172.27.185.1',master_user='root',master_password='root';start slave;show slave status;
stop slave;changemaster to master_host='172.27.185.1',master_user='root',master_password='root';start slave;show slave status;

注意事项

  1. 一定要在同一个局域网中
  2. 使用360WiFi创建局域网
  3. 最好把防火墙全部关闭掉

什么是读写分离

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

读写分离的好处

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

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

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

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

主从复制原理

依赖于二进制日志,binary-log.

二进制日志中记录引起数据库发生改变的语句

Insert 、delete、update、create table

Scale-up与Scale-out区别

Scale Out是指Application可以在水平方向上扩展。一般对数据中心的应用而言,Scale out指的是当添加更多的机器时,应用仍然可以很好的利用这些机器的资源来提升自己的效率从而达到很好的扩展性。

Scale Up是指Application可以在垂直方向上扩展。一般对单台机器而言,Scale Up值得是当某个计算节点(机器)添加更多的CPU Cores,存储设备,使用更大的内存时,应用可以很充分的利用这些资源来提升自己的效率从而达到很好的扩展性。

da6e9275bd4c7fd01ffeb3580995d126.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值