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数据库做主从同步的方案,特点是异步复制,广泛用在各种对 ...
随机推荐
- MCU编程_基础
包含头文件符号的区别 有这样的包含头文件语句 #include <reg52.h> #include"reg52.h" 两者区别在于: <>:编译器先进入软 ...
- MySQL表名大小写设置
1 简介 在MySQL中,数据库对应数据目录中的目录.数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎).因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小 ...
- 分形之谢尔宾斯基(Sierpinski)三角形
谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集.也有的资料将其称之为谢尔宾斯基坟垛. 其生成过程为: 取一个 ...
- 行人检测(Pedestrian Detection)资源
一.论文 综述类的文章 [1]P.Dollar, C. Wojek,B. Schiele, et al. Pedestrian detection: an evaluation of the stat ...
- 让你的照片更鲜艳------hsv拉伸
如果你的照片看上去灰蒙蒙的,缺少生机,那么hsv拉伸也许可以帮你的忙.hsv拉伸是一种可以提高图像鲜艳程度的图像增强方法,它能够让图像的颜色更加鲜活.艳丽,而且它的处理结果看上去很自然,比如源图中较暗 ...
- fping常用参数介绍
fping的主要参数有以下两个: -a:只显示存活主机: -u:只显示不存活主机: -l:循环ping目标IP地址的输入方式: fping IP1 IP2 IP3 ...: fping -f file ...
- asp.net web api 跨域问题
缘起 以前在asp.net mvc时代,很少出现跨域问题 自从使用了asp.net web api + angular (1/2)之后,开始有跨域问题了. 简单普及下跨域: 我的理解是只要是前台页面与 ...
- 表单控件 css的三中引入方式css选择器
1. 表单控件: 单选框 如果两个单选的name值一样,会产生互斥效果 <p> <!--单选框--> 男<input type="radio" nam ...
- 伪装为 吃鸡账号获取器 的QQ木马分析
本文作者:i春秋作家坏猫叔叔 0×01 起因随着吃鸡热潮的来临,各种各样的吃鸡辅助和账号交易也在互联网的灰色地带迅速繁殖滋生.其中有真有假,也不乏心怀鬼胎的“放马人”.吃过晚饭后在一个论坛看到了这样一 ...
- Java代码审计连载之—SQL注入
前言近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很DT.想当初入门代码审计的时候真是非常难,网上几乎找不到什么java ...