Mysql复制原理-[主从模式]--[主主模式]

####MySql 主从模式原理####

主从复制原理如下:slave(从服务器)master(主服务器)

【mysql主从是异步复制过程】

master开启bin-log功能,日志文件用于记录数据库的读写增删;

主从复制过程存在三个线程:[Master端的I/O线程]、[Slave的I/O线程]与[SQL线程].
Master端需要开启binlog日志,Slave端需要开启relaylog

【主从复制过程】

1、Slave端的I/O读取master.info文件,获取binlog文件名和位置点,然后向Master端的I/O线程请求,该binlog文件名和位置点的binlog信息。(master.info文件在配置主从复制时使用change master命令来指定生成)

2、Master端的I/O线程会根据Slave端的I/O线程请求的信息来读取Master的binlog日志信息与及读取到最新的binlog文件名和位置点一同返回给Slave的I/O线程。

3、Slave端的I/O线程会把获取到的binlog日志写入relaylog(中继日志)文件中,并且更新master.info文件信息。(把读取到Master最新的binlog日志文件名和位置点更新到master.info文件中,下一次当前位置去读取Master的binlog日志)

4、Slave端的SQL线程会定期读取relaylog,把二进制的日志解析成SQL语句,并执行这些SQL语句,同步数据到从库中。

注意:mysql主从复制要求主从两个数据库版本相同,或者从机比主机版本高;
准备两个mysql,一个做主,一个做从.防火墙,selinux都要关闭,保证可以ping通对方

【复制模式】

1.异步模式(mysql async-mode)

主节点不会主动push binlog到从节点,这样有可能导致fail over的情况下,也许从节点没有即时地将最新的binlog同步到本地。

2.半同步模式(mysql semi-sync)

主节点只需要接收到其中一台从节点的返回信息,就会commit;
否则需要等待直到超时时间然后切换成异步模式再提交;
这样做的目的可以使主从数据库的数据延迟缩小,可以提高数据安全性,确保了事务提交后,binlog至少传输到了一个从节点上,不能保证从节点将此事务更新到db中。
性能上会有一定的降低,响应时间会变长。

3.全同步模式

主节点和从节点全部执行了commit并确认才会向客户端返回成功。

4.  GTID复制模式

在传统的复制里面,当发生故障,需要主从切换,需要找到binlog和pos点,然后将主节点指向新的主节点,相对来说比较麻烦,也容易出错。
在MySQL 5.6里面,不用再找binlog和pos点,我们只需要知道主节点的ip,端口,以及账号密码就行,因为复制是自动的,MySQL会通过内部机制GTID自动找点同步。
多线程复制(基于库),在MySQL 5.6以前的版本,slave的复制是单线程的。
一个事件一个事件的读取应用。而master是并发写入的,所以延时是避免不了的。
唯一有效的方法是把多个库放在多台slave,这样又有点浪费服务器。
在MySQL 5.6里面,我们可以把多个表放在多个库,这样就可以使用多线程复制。

###基于GTID复制实现的工作原理###

主节点更新数据时,会在事务前产生GTID,一起记录到binlog日志中。
从节点的I/O线程将变更的binlog,写入到本地的relay log中。
SQL线程从relay log中获取GTID,然后对比本地binlog是否有记录(所以MySQL从节点必须要开启binary log)。
如果有记录,说明该GTID的事务已经执行,从节点会忽略。
如果没有记录,从节点就会从relay log中执行该GTID的事务,并记录到bin log。
在解析过程中会判断是否有主键,如果没有就用二级索引,如果有就用全部扫描。
###复制方式
1、基于语句的复制在Master上执行的SQL语句,在Slave上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制
2、基于行的复制把改变的内容复制到Slave,而不是把命令在Slave上执行一遍。从MySQL5.0开始支持
3、混合类型的复制默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制
相应地,binlog的格式也有三种:STATEMENT,ROW,MIXED。

####MySql 主主模式原理####

主主复制的原理实际上是主从复制的原理,让两台服务器互为主从,就实现了主主复制
要实现主主复制,则需要两个数据库版本相同。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip
毕设新项目基于python3.7+django+sqlite开发的学生就业管理系统源码+使用说明(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 学生就业管理系统(前端) ## 项目开发环境 - IDE: vscode - node版本: v12.14.1 - npm版本: 6.13.4 - vue版本: @vue/cli 4.1.2 - 操作系统: UOS 20 ## 1.进入项目目录安装依赖 ``` npm install ``` ## 2.命令行执行进入UI界面进行项目管理 ``` vue ui ``` ## 3.编译发布包(请注意编译后存储路径) #### PS:需要将编译后的包复制到后端项目的根目录下并命名为'static' 学生就业管理系统(后端) ## 1.项目开发环境 - IDE: vscode - Django版本: 3.0.3 - Python版本: python3.7.3 - 数据库 : sqlite3(测试专用) - 操作系统 : UOS 20 ## 2.csdn下载本项目并生成/安装依赖 ``` pip freeze > requirements.txt pip install -r requirements.txt ``` ## 3.项目MySQL数据库链接错误 [点击查看解决方法](https://www.cnblogs.com/izbw/p/11279237.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值