复制工作原理
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。

复制的本质就是一个完全备份+二进制日志备份还原。由主库将二进制日志"推送"给从库,然后从库应用这些"二进制日志",以实现主从数据同步

当主从复制配置完成后,各复制线程启动顺序如下:

1> 从库上启动复制,在从库上创建I/O线程,I/O线程连接到主库
2> 主库创建binlog dump线程读取数据库事件并发送给IO线程
3> 从库上的I/O线程接收到事件数据,将事件数据更新到中继日志(relay log)中
4> 从库上SQL线程读取中继日志中更新的事件数据并应用到从库上。

PS:MYSQL 库只应用和自己ServerID不同的binlog日志,MYSQL通过判断Binlog事件中的不同ServerID即可判断当前库是否是事件的初始发生Server,因此双住复制+多级复制不会出现循环复制。

使用文件存储复制进度信息

在早期的MySQL中,为保证从库Crash重启后,从库的IO线程和SQL线程仍能正常工作,从库上会默认创建两个日志文件master.info和relay-log.info来保存复制的进度,如下图所示:

在存放中继日志时,先更新复制元数据Receiver Meta-data,再将二进制日志写入中继日志文件中;
在应用中继日志时,先更新复制元数据Applier Meta-data,在将二进制日志应用到数据库中;
当从库发生宕机恢复后,会根据复制元数据来判断从哪个位置点开始恢复,但由于更新元数据和应用二进制不在一个事务中,因此Applier Meta-data无法有效的反应应用日志的重做状态。

使用表存放复制进度信息

在MySQL 5.6版本后,在存储进度信息方面做了增强,可以使用表mysql.slave_master_info和mysql.slave_relay_log_info来存放复制进度。

使用表来存放复制元数据的好处:
1>可以将数据库数据和复制元数据一起提交或回滚。
2>无需再使用文件来存放元数据
3>灾难恢复时从库可以找到一个有效的位置来恢复

缺陷:如果表使用非事务性存储引擎,将无法进行回滚

配置表方式存放复制进度信息:

##配置从库使用表来存放复制元数据
STOP SLAVE;
SET @@GLOBAL.master_info_repository='TABLE';
SET @@GLOBAL.relay_log_info_repository='TABLE';
SELECT @@GLOBAL.master_info_repository,@@GLOBAL.relay_log_info_repository;
START SLAVE; SELECT * FROM mysql.slave_master_info \G
SELECT * FROM mysql.slave_relay_log_info \G; ##注意修改配置文件以保证复制重启后仍使用表来存放元数据
relay_log_info_repository='TABLE'
master_info_repository='TABLE'

PS:从库上使用的复制账号和密码都明文存放在元数据中。

MySQL Replication--复制基本工作原理的更多相关文章

  1. 浅谈MySQL Replication(复制)基本原理

    1.MySQL Replication复制进程MySQL的复制(replication)是一个异步的复制,从一个MySQL instace(称之为Master)复制到另一个MySQL instance ...

  2. GTID复制的工作原理

    参考自:https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-lifecycle.html 笔记说明: 本文翻译自官网,当然会根据语义做一 ...

  3. mysql(一)工作原理 & 数据库引擎

    参考文档 http://www.cnblogs.com/xiaotengyi/articles/3641983.html innodb:https://www.cnblogs.com/Aiapple/ ...

  4. 在Docker平台实现MySQL Replication(复制)

    MySQL Replication提供了数据库之间复制数据的功能,通过这个功能可以让一个数据库的数据更改自动同步到另外一个数据库.通常用这个功能来实现数据备份.数据容灾.数据冗余,进一步实现数据的读写 ...

  5. 《Mysql - Order By 的工作原理?》

    一:概述 - order by 用于 SQL 语句中的排序. - 以  select city,name,age from t where city='杭州' order by name limit ...

  6. mysql replication 复制的一些问题

    1   过大的复制延迟 mysql 的复制延迟是一个常见问题,现在已经有一些解决方案,如淘宝开发的一些工具 2 没有磁盘空间 复制导致磁盘空间塞满,二进制日志.中继日志或临时文件把磁盘塞满,slave ...

  7. Windows 下MySql Replication(复制)配置

    环境准备 到官网下载mysql-installer-web-community-5.7.21.0.msi并安装,选择MySql Workbench,记录安装时root输入的密码. 需要安装在两台机器上 ...

  8. MongoDB复制集的工作原理介绍(二)

    复制集工作原理 1)数据复制原理 开启复制集后,主节点会在 local 库下生成一个集合叫 oplog.rs,这是一个有限集合,也就是大小是固定的.其中记录的是整个mongod实例一段时间内数据库的所 ...

  9. 浅析 MySQL Replication(本文转自网络,非本人所写)

    作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...

随机推荐

  1. MySQL导数据笔记

    2019-12-16 9:08:43 星期一 MySQL 5.6 limit / order 有bug, 如果主键不是自增的, 只能全表导出导入, 增量导入导出的话会报主键重复 触发器: 批量导入数据 ...

  2. phpspreadsheet

    2019-5-9 8:20:07 星期四 昨天在看PHPExcel的时候, github上作者说已经停止更新了, 推荐使用phpspreadsheet, 查看了一下官方文档, 功能还挺强大的, 可以读 ...

  3. Python实用日期时间处理方法汇总

    这篇文章主要介绍了Python实用日期时间处理方法汇总,本文讲解了获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个d ...

  4. hive的分桶原理

    套话之分桶的定义: 分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储.对于 hive 中每一个表.分区都可以进一步进行分桶. 列的哈希值除以桶的个数来决定每条数据划分在哪个桶中.(网上其它定 ...

  5. Spring MVC -- 下载文件

    像图片或者HTML文件这样的静态资源,在浏览器中打开正确的URL即可下载,只要该资源是放在应用程序的目录下,或者放在应用程序目录的子目录下,而不是放在WEB-INF下,tomcat服务器就会将该资源发 ...

  6. nginx使用与配置入门指南

    这是一篇关于nginx使用与配置的入门指南,但不包括nginx的编译与安装.我假定你知晓如何安装nginx.对大多数Linux系统来说,nginx都已经存在于它们的软件包里,直接使用系统提供的软件管理 ...

  7. 【maven学习】pom.xml文件详解

    环境 apache-maven-3.6.1 jdk 1.8 eclipse 4.7 POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示, ...

  8. 使用Android手机进行开发的尝试

    使用Android手机查看和修改Excel文件.PowerPoint文件并连接幻灯机进行演示等办公方式想必大家已经有所了解.今天介绍一下怎样使用Android进行软件开发. Termux 使用Andr ...

  9. Spring security oauth2 password flow

    Spring security oauth2 包含以下两个endpoint来实现Authorization Server: AuthorizationEndpoint: 授权请求访问端点, 默认url ...

  10. zuul网关路由作用

    为了方便客户端调用微服务,所以设计出了网关.在微服务实例地址发生改变的情况下,客户端调用服务要能够不受影响. 网关可以完成的功能:路由,反向代理,日志记录,权限控制,限流 在本例子中 Eureka  ...