mysql主从复制和读写分离原理

主从复制:就是建立一个和主数据库完全一样的数据库环境。主数据库是实时的业务数据库。
主数据库的作用:
1,做数据的热备,作为后备数据库,当主数据库服务器发生故障后,可切换到从数据库,避免数据丢失。
2,业务量大I/O访问频率过高,单机无法满足,此时做多库的存储,降低I/O访问频率,提高单个机器的I/O性能。
3,读写分离,使数据库支持更大的并发。
主从复制的步骤:
1,主数据库的更新(UPDATE,INSERT,DELETE)事件被写到binlog。
2,从数据库发起连接,连接主库。
3,此时主库建立一个 binlog dump thread线程,把binlog的内容发送到从库。
4,从库启动后,创建一个I/O线程,读取主库发送过来的binlog内容写入到relay log。
5,从库还会创建一个sql线程,从relay log内读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到从库。
复制过程:
在这里插入图片描述
常见的MySQL读写分离分两种:
1,基于程序代码实现
在代码中根据select 、insert进行路由分类,这类方法也是目前生产环境下应用最广泛的。优点是性能较好,因为程序在代码中实现,不需要增加额外的硬件开支,缺点是需要开发人员来实现,运维人员无从下手。
2基于中间代理实现
代理一般介于应用服务器和数据库服务器之间,代理数据库服务器接收到应用服务器的请求后根据判断后转发到,后端数据库,有以下代表性的程序。
(1)mysql_proxy。mysql_proxy是Mysql的一个开源项目,通过其自带的lua脚本进行sql判断。
(2)Atlas。是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。支持事物以及存储过程。
(3)Amoeba。由阿里巴巴集团在职员工陈思儒使用序java语言进行开发,阿里巴巴集团将其用户生产环境下,但是他并不支持事物以及存数过程。

不是所有的应用都能够在基于程序代码中实现读写分离,像一些大型的java应用,如果在程序代码中实现读写分离对代码的改动就较大,所以,像这种应用一般会考虑使用代理层来实现。
常见问题:
1,主从复制的原理和好处:上面的两点。
2,从数据库的读的延迟问题了解吗?如何解决?
产生原因:
1,主库的TPS并发比较高,产生的DDL数量超过了slave一个sql线程所能承受的范围,就会产生延迟。
2,还可能与slave的大型query语句产生了锁等待。
解决方法:
1,做系统架构优化,尽量主库的DDL快速执行。
2,还有就是主库是写,对数据安全性较高,比如 sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也 可以设置为0来提高sql的执行效率
3,做主从后主服务器挂了怎么办?
半同步复制—解决数据丢失的问题
并行复制—-解决从库复制延迟的问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值