MySQL、Mariadb 复制原理
复制的作用
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 复制原理的更多相关文章
- MySQL的复制原理及配置
MySQL 的数据库的高可用性的架构大概有以下几种:集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单介绍复制的原理及配置,以及一些常见的问题. 一.复制的原理 MySQL 复制基于主服 ...
- Mysql的复制原理以及流程
MySQL复制概述 简单来说就是保证主服务器(Master)和从服务器(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过 ...
- MySQL的复制机制
MySQL的复制机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL复制介绍 1>.MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例( ...
- MySQL\MariaDB 多线程复制初探
背景: MariaDB 在10.0.5就已经支持了并行复制的功能,即从库多线程复制的功能.MySQL最先在5.6.3中支持.目前暂时没有用MySQL5.6的版本,故暂时只对MariaDB进行一些说明, ...
- MySQL并发复制系列三:MySQL和MariaDB实现对比
http://blog.itpub.net/28218939/viewspace-1975856/ 并发复制(Parallel Replication) 系列三:MySQL 5.7 和MariaDB ...
- MySQL(mariadb)主从复制模式与复制过滤
在前一篇文章<mysql多实例与复制应用>中只对mysql的复制做了简单的介绍,本篇内容专门介绍一下mysql的复制. MySQL复制 mysql复制是指将主数据库的DDL和DML操作通过 ...
- MySQL/MariaDB数据库的半同步复制
MySQL/MariaDB数据库的半同步复制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL半同步复制概述 1>.MySQL默认的异步复制 默认情况下,M ...
- MySQL并行复制(MTS)原理(完整版)
目录 MySQL 5.6并行复制架构 MySQL 5.7并行复制原理 Master 组提交(group commit) 支持并行复制的GTID slave LOGICAL_CLOCK(由order c ...
- 烂泥:学习mysql数据库主从同步复制原理
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对 ...
随机推荐
- CentOS7安装BugFree
1. 安装apache yum install httpd 2. 安装mysql yum install mysql yum install mysql-server 注意: 1)已安装mysql的跳 ...
- CentOS中自动加载802.1q模块
要想在CentOS中自动加载内核模块,需要在/etc/sysconfig/modules/目录中增加一个脚本,在此脚本中加载所需的模块. 下面是我所用的一个名为8021q.modules的脚本,用来在 ...
- 2.Django模型
ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...
- c# List使用中遇到的问题
最近在项目上写的方法,想通过减少访问数据层,将需要重复调用的值存入List,无意中碰到的一个巨坑,至今仍不明所以,在此写出来,一来是看看有没有同道中人,二来是看看有没有大牛能解惑. 逻辑如下: 1.从 ...
- 不一样的网络流系列——Dinic跑得快
前言 摆王兴致冲冲地跑到我们机房来对我说跟你讲一个黑科技... Dinic的神奇优化 Dinic优化 我们发现如果Dinic不建反向边会跑的飞起(当然Wa是必然的) 所以考虑在加反向边的基础上优化. ...
- Android---------------Handler的学习
public LocalVPNService() { mHandlerThread = new HandlerThread(TAG); mHandlerThread.start(); mBackgro ...
- shapefile的使用和地理信息的获得
Shapefile文件是美国ESRI公司发布的文件格式,因其ArcGIS软件的推广而得到了普遍的使用,是现在GIS领域使用最为广泛的矢量数据格式.官方称Shapefile是一种用于存储地理要素的几何位 ...
- win7 docker 挂载共享目录
在 win7 下用 docker 不像 win10 那样方便,安装包都不一样. 在 win7 下共享一个目录的方法如下: 1. 先设置 win7 到 VirtualBox 中 docker 用的那个虚 ...
- [工具]Cobalt Strike 3.13 TeamServer for Windows
Cobalt Strike 3.13 TeamServer for Windows 0x001 环境 CS 3.12 或 3.13 Kali或Win最好安装jdk1.8.5或之后版本 设置环境变量,如 ...
- redis哨兵集群环境搭建
一.哨兵的介绍 哨兵(sentinal)是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个redis实 ...