复制的作用

l  水平扩展

l  数据备份

l  数据分析

l  数据分布

l  高可用性

复制的工作原理

Mariadb的复制功能是基于binlog进行的。复制的工作主要是由主库上Master dump 线程、从库上的slave IO线程以及slave SQL线程来完成的。

在主库上执行 SHOW PROCESSLIST 命令查看到dump线程。

当在从库上执行START SLAVE 语句来开启复制功能时,会闯将一个slave IO线程和一个slave SQL线程。slave IO线程负责连接到主库,然后接收主库master dump线程发送过来的binlog内容,写到本地的relay-log中。slave SQL线程负责重放relay-log中的内容,将主库的所有修改反映到从库上。

复制的大概过程可以总结为如下3步:

(1)主库将所有的修改以事件的形式记录到binlog中,主库的master dump线程负责发送binlog内容到从库。

(2)从库的slave IO 线程将接收到的binlog事件记录到本地的relay-log中。

(3)从库的slave SQL线程重放relay-log中的事件。

relay-log.info文件记录了slave SQL线程重放的进度等信息,保证了停止之后再重新开启复制时,复制工作能够从正确的位置开始。

relay-log由一系列包含了主库binlog事件的relay-log文件和一个管理这些文件的relay-log.index文件组成。(与binlog文件相似)

relay-log文件和binlog文件格式一样,同样可以使用mysqlbinlog工具来查看其中的内容。

通过配置relay-log="file-name"和relay-log-index="file-name"这两个参数,可以指定relay-log文件和relay-log.index文件的名称

relay-log会发生切换的几种情况如下:

l  slave IO线程启动的时候。这发生在执行START SLAVE 语句或者Mariad/Mysql启动时。

。默认会使用主机名来命名relay-log日志,因此在复制的过程中更改主机名可能导致因找不到relay-log文件而引发的错误。

l  执行FLUSH LOGS语句刷新日志时。

l  达到参数max_relay_log_size指定的大小时。当max_relay_log_size为0时,以参数max_binlog_size的值作为max_relay_log_size的值。

l  slave SQL线程重放完一个relay-log文件中所有事件时,会自动删除该relay-log文件,所以没有显示删除relay-log的命令。

master.info文件和relay-log.info文件

开启复制功能时,在从数据库的数据目录下回创建一个master.info文件和一个relay-log.info文件,他们用来记录复制工作进度。

l  master.info 文件:该文件用来保存主库的主机名和端口信息以及登录到主库所需要的账号和密码。这里需要注意的是,账号和密码都是以文本的格式保存在master.info文件中,所以在实际应用中需要特别注意这一点,以防出现安全的问题。master.info文件还以binlog文件名和偏移量的形式记录了从库接收主库binlog事件的进度信息,有了这些信息,slave IO线程就知道从哪里从新开始自己的工作了。

l  relay-log.info文件:该文件用来记录从库的重放进度。

通过配置master-info-file="file-name"和relay-log-info-file="file-name"参数可以改变master.info文件和relay-log.info文件的名称。在MySQL5.6和Mariadb10.0中可以通过配置master-info-repository=TABLE(默认为FILE)来使用表masql.salve_master_info来代替master.info文件,存储相关的信息。同样,通过配置relay-log-info-repository=TABLE,可以用表mysql.slave_relay_log_info来替代relay-log.info文件。

MySQL、Mariadb 复制原理的更多相关文章

  1. MySQL的复制原理及配置

    MySQL 的数据库的高可用性的架构大概有以下几种:集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单介绍复制的原理及配置,以及一些常见的问题. 一.复制的原理 MySQL 复制基于主服 ...

  2. Mysql的复制原理以及流程

    MySQL复制概述 简单来说就是保证主服务器(Master)和从服务器(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过 ...

  3. MySQL的复制机制

    MySQL的复制机制 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL复制介绍 1>.MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例( ...

  4. MySQL\MariaDB 多线程复制初探

    背景: MariaDB 在10.0.5就已经支持了并行复制的功能,即从库多线程复制的功能.MySQL最先在5.6.3中支持.目前暂时没有用MySQL5.6的版本,故暂时只对MariaDB进行一些说明, ...

  5. MySQL并发复制系列三:MySQL和MariaDB实现对比

    http://blog.itpub.net/28218939/viewspace-1975856/ 并发复制(Parallel Replication) 系列三:MySQL 5.7 和MariaDB ...

  6. MySQL(mariadb)主从复制模式与复制过滤

    在前一篇文章<mysql多实例与复制应用>中只对mysql的复制做了简单的介绍,本篇内容专门介绍一下mysql的复制. MySQL复制 mysql复制是指将主数据库的DDL和DML操作通过 ...

  7. MySQL/MariaDB数据库的半同步复制

      MySQL/MariaDB数据库的半同步复制 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL半同步复制概述 1>.MySQL默认的异步复制 默认情况下,M ...

  8. MySQL并行复制(MTS)原理(完整版)

    目录 MySQL 5.6并行复制架构 MySQL 5.7并行复制原理 Master 组提交(group commit) 支持并行复制的GTID slave LOGICAL_CLOCK(由order c ...

  9. 烂泥:学习mysql数据库主从同步复制原理

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对 ...

随机推荐

  1. [ 9.11 ]CF每日一题系列—— 441C暴力模拟

    Description: n * m 的地图,建设k个管道管道只能横竖走,且长度大于等于2,问你任意一种建设方法 Solution: 图里没有障碍,所以先把前k - 1个管道每个分2个长度,最后一个管 ...

  2. excel查找某一列的值在、不在另一列中

    统计中遇到找出一列的值不在另一列的需求: 找出A列中不在B列的值 方法如下: 使用countif函数 比如找出A列中不在B列的值: 在C1中输入 COUNTIF(B:B,A1) 下拉单元格,在首行添加 ...

  3. 关于质能等效的两个思想实验 Two Ideological Experiments on Mass-Energy Equivalence

    大家知道,物质和能量是等效的,虽然质能方程已暗示了这种等效关系,但并非显而易见.此等效性可以从以下两个思想实验中获知. 实验一:一台电子称上放置一个金属物体,加热它,称的读数将会略微增加.这是因为金属 ...

  4. Azure DevOps Server 2019 (TFS)安装教程

    概述 Azure DevOps Server 2019 (之前的名称为TFS),作为微软Azure DevOps 的企业私有(on-premises)服务器,是一个为开发团队提供软件协作开发管理的服务 ...

  5. UPDATE语句中SET部分列赋值的先后顺序有影响么?

    昨天研发同事问我个问题,UPDATE语句中SET部分列赋值的先后顺序会影响结果么?以前没考虑过这个问题,因为通常我们都会UPDATE时给列赋予一个确定的值,而不是一个依赖于其他列的值. 测试环境: D ...

  6. WPF 嵌入Winform GDI 、 开启AllowsTransparenc问题

    此文章可以解决2至少2个问题: 1.开启AllowsTransparenc造成的GDI+组件不显示问题 2.WPF 组件无法覆盖嵌入WPF窗口的任何第三方GDI+组件上层 方案1:自制双层 原理:用一 ...

  7. 全球第一开源ERP Odoo操作手册 数据库简介

    1.3 数据库简介 每一个独立核算的企业都有一套相互关联的账簿体系, 把这一套完整的账簿体系建立在计算机系统中就称为一个数据库. 一般一个企业只用一个数据库. 如果企业有几个下属的独立核算的实体,也可 ...

  8. CentOS 7 - 配置服务实现开机自启动

    新建系统服务描述文件 cd /etc/systemd/system sudo vim myapp.service 添加以下配置: [Unit] # 这里添加你的服务描述 Description=mya ...

  9. CentOS 7 - 创建新用户

    当进行服务器操作时,我们尽量不要使用root用户进行操作,特别是当我们使用生产环境时. 本文我们将介绍CentOS 7下用户的创建. 创建新用户 adduser 用户名 更改用户密码 passwd 用 ...

  10. 关于错误 openssl/ssl.h:没有那个文件或目录的解决办法

    原文链接:https://blog.csdn.net/kulala082/article/details/68484314 首先得安装openssl:sudo apt-get install open ...