主从复制的原理?
主服务器写,从服务器读;
主服务器将更新语句记录到日志中,从服务器获取主服务器的日志,并写入到自己日志中,从服务器的sql线程监控从服务器日志情况,发现变化,就对日志进行解析并执行
MySQL支持哪些复制类型?
基于语句、基于行、混合复制
基于语句:主服务器执行的sql,从服务器再执行一遍;默认复制方式,效率高
基于行:将改变的内容复制过去
混合型:默认基于语句,一旦语句无法精准复制,就采用基于行的复制
主从复制的过程?
主节点开启二进制日志(将sql记录到日志中)
从节点执行sart slave命令,开启主从复制,从节点的i/o线程,连接主节点,并请求指定日志的指定位置,之后的日志内容
主节点接收到请求后,为每一个请求,启动一个dump线程,将请求的日志信息,返回给从节点(包括下一次更新位置)
从节点接收到日志内容后,将日志内容,更新到本机的中继日志,的最末端
从节点的sql线程,监测到中继日志新增了内容后,会将内容解析成sql语句,并在本机执行
主从复制是拉?还是推?
是推;
拉:是通过不停的循环访问主库的数据变更,消耗资源过多,效率低;
推:是主库主动告诉从库数据变化,只有变化时,才会发生交互,消耗资源少
如何推的?
当从库向主库申请数据变更时,需要指定文件、位置,相应的主库会启动一个线程,将变更的记录一条条发送给从库,从库一直监听主库的变化
主从复制方案?
异步复制、半同步复制、全同步复制
异步复制:默认复制方式;主节点事务提交前,不需要经过从节点确认,且不保证日志一定写入到从节点的中继日志中,从服务器的sql线程异步执行中继日志,也不需要从服务器确认,且不保证执行成功
半同步复制:5.5及以后新增;主节点事务提交前,必须确保日志,至少写入到一台从服务器,并执行成功,才能进行事务提交
全同步复制:5.7.17及以后新增;主节点事务提交前,必须确保全部从服务器日志都要写入且执行成功,才能完成提交
当一台从服务器时,半同步和全同步一样吗?
是一样的,全同步就是要保证所有从服务器都执行成功,在只有一台从服务器时,刚好和半同步的原理一致,因此是相同的
如果主从同步失败该怎么办?
使用set全局跳过错误事件
重新连接主数据库,跳过中间同步问题,可能会导致一些数据未同步,可以先保证数据和结构都一致再重新连接
主从复制,数据延迟的原因?
从库太多、从库硬件太差、慢sql、主库写入并发太大、网络延迟
如何解决主从延迟?
强制读取主库数据(会导致主从失效)
检查延迟时间
半同步复制
并行复制
sleep等待方案(主库更新后,读从库之前先sleep一下)
主从复制和读写分离的关系?
读写分离是建立在主从复制的基础上的,通过读写分离提升数据库的并发负载,通过主从复制进行数据同步
如何实现读写分离?
通过路由控制,将更新操作和查询操作分别指向不同数据库,laravel框架的配置文件中,可以配置读库和写库
mysql主从复制和mysql集群的区别?
主从:是通过mysql的复制来保证数据一致性的,可能会有延迟;不满足高可用,主机宕机,需要手动切换,业务会中断;
集群:数据同步是异步的;实时同步,高可用,性能相对较差
集群的工作流程?
主节点在执行提交语句时,将事务发送到从节点;
2:每个从节点都要准备事务的提交,然后向主节点发送消息(准备成功或失败);
3-1:如果都准备成功,主节点会告知所有从节点,提交事务;
3-2:如果有一个失败,主节点会告诉所有从节点,终止事务;
4:从节点按照消息执行后,将结果返回给主节点
5:然后由主节点报告该事务最终是,被提交或终止;
来源地址:https://blog.csdn.net/qq_38989173/article/details/130450074