MySQL之主从复制的过程和原理

前几天搭建了MySQL的主从复制,已经搭建完成,但是主从复制的原理还不知道,所以来研究一下。

本文的部分内容来自于互联网。

主从复制的过程

首先要了解到的是一个单向主从复制的实现是由三个线程来完成,master一个IO线程,slave一个IO

线程和一个SQL线程。

1. slave 上面的IO线程连接上 master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

2. master 接收到来自 slave 的IO线程的请求后,通过负责复制的IO线程根据请求信息读取指定日志指定位置之后的日志信息,返回给slave端的IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在master端的bin-log文件的名称以及在bin-log中的位置;

3. slave的IO线程接收到信息后,将接收到的日志内容依次写入到slave端的Relay Log文件(hostname-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master- info文件中,以便在下一次读取的时候能够清楚的告诉master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”

  4. slave的SQL线程检测到Relay Log中新增加了内容后,会马上解析该Log文件中的内容成为在 master 端真实执行时候的那些可执行的Query 语句,并在自身执行这些Query。这样,实际上就是在 master 端和slave 端执行了同样的Query,所以两端的数据是完全一样的。

下面是实际的操作图

1.首先看一下主库的状态

2.然后看一下从库中master.info和nginx-relay-bin.000008(请无视名字,这个跟主机名有关)

master.info中一部分文件内容,跟master的bin-log的名称和位置是一致的

然后是nginx-relay-bin.000008的文件(有删节)

然后主库建一个库测试一下

看一下从库的master.info和nginx-relay-bin.000008文件

nginx-relay-bin.000008文件

现在我们来模拟一下故障,此时从数据库宕机,此时master.info文件不变,但是nginx-relay-bin.000008文件产生变化

主数据库新建一个库测试一下,

现在启动从数据库,此时relay-bin日志会重新产生两个,查看一下数值大的那个

查看nginx.relay-bin.000010

此时master.info文件也会更新到最新的pos

故障模拟完成。

写到这里,突然感觉写的实在是太繁琐了,详细一点也好,保证大家能看明白,不会云里雾里的感觉。

--------------------------------------分割线-----------------------------------------

说一下自己做实验时一些小细节

1.搭建完单向主从的时候,在主库创建了一个库sunys01做测试,然后在从库删掉了他,此时的主从数据不一致,但是主从还是正常的,主库再建一个库,从库也能同步的到数据。我一直以为主从同步只要是在从库进行过操作就会导致主从断掉。现在接上面的情况,从库删掉了sunys01,在主库也删掉sunys01,此时主从断裂,主库写数据从库无法同步数据, 现在我在从库重新创建了一个sunys01库,重启一下mysql,主从恢复了,主库中后续数据也成功同步。

2.做了一个双向主从在主1创建新库,同时他的master status变掉了,主1创建的库在主2也有,但是主2的master status也变掉了。我同学也是做的双主,但是主2的master status是不会变的,不知道是什么原因

写到这里终于结束了,有什么问题可以在评论中询问,大家共同进步

时间: 2024-11-06 04:49:03

MySQL之主从复制的过程和原理的相关文章

mysql的主从复制及实现过程

mysql的主从复制 为什么需要用到mysql的主从复制功能? 一般在实际生产中,仅仅有一台数据库服务器作为独立的数据库是很少见的,因为一旦这台独立的服务器挂掉,那么前端的程序或用户将无法访问后端的数据了,这样会造成服务中断的.对于有些企业来说,保证服务的连续性是非常重要的,因此在这种情况下需要保证数据库服务器的高可用性. 有时某个数据库服务器台过于繁忙的话,我们需要减轻服务器的负载,那么我们可以将这个服务器上的写请求和读请求分开,分别由不同的服务器来完成,这样岂不是更好.对于一个数据库服务器而

Mysql中主从复制的原理、配置过程以及实际案例

Mysql中主从复制的原理.配置过程以及实际案例1.什么是主从复制?原理:主从分离,什么意思呢?我们不妨画个图看看.如图1所示: 2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6.7_64位操作系统,并分别在两台服务器上安装mysql.我的IP地址分别为:192.168.1.15/192.168.1.16,这里我定义15为主服务器,16为从服务器.首先,我们编辑主服务器中mysql配置文件.(因我的mysql使用非root用户安装,因此配置文件放在/home/formal/

MySQL GTID 主从复制的原理及配置

GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成.这个全局事务ID不仅仅在原始服务器器上唯一,在所有存在主从关系 的mysql服务器上也是唯一的.正是因为这样一个特性使得mysql的主从复制变得更加简单,以及数据库一致性更可靠.本文主要描述了快速配置一个基于GTID的主从复制架构,供大家参考. 一.GTID的概念 1.全局事务标识:global transaction identifiers. 2.GTID是一个事务一一对应,并且全

mysql之主从复制原理

参考官方文档: http://dev.mysql.com/doc/refman/5.6/en/replication-implementation.html 找个时间写一下. mysql之主从复制原理,布布扣,bubuko.com

mysql的主从复制原理

一个简单完整的 Mysql 主从复制,读写分离的示意图. 1. 首先搭建 Mysql 主从架构,实现 将 mater 数据自动复制到 slave MySQL 复制的工作方式很简单,一台服务器作为主机,一台或多台服务器作为从机.主机会把数据库的变化记录到日志.一旦这些变化被记录到日志,就会立刻(或者以设定的时间间隔)被送到从机. 使用MySQL 复制提供扩展大型网站的能力,这些大型网站的数据库主要是读操作(SELECTs).从机用於复制主机的銷秏是很少的(通常每个从机1%的开销),在大型网站中每个

mysql/mariadb主从复制架构配置及过程中出现的问题

两台CentOS7系虚拟主机:分别是:主服务器172.16.75.1,从服务器172.16.75.2使用的是mariadb-5.5.56,即centOS自带的软件版本为了使实验结果显示精准,此处关闭两台服务器的防火墙和SELinux:[[email protected] ~]# setenforce 0[[email protected] ~]# iptables -F 一.首先在主服务器172.16.75.1上配置:在/etc/my.cnf中配置如下:[mysqld]###定义二进制日志的存放

MySQL的主从复制是如何实现的

前言 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果. MySQL主从复制架构图 一主一从 master-slave-replication-01 一主多从 master-slave-replication-02 级联 master-slave-repli

mysql配置主从复制

                               主从复制 一.主从复制的工作原理 Mysql在Master与slave之间实现整个复制的过程由3个线程来完成的,其中两个线程(SQL线程和IO线程)在 Slave端,另外一个线程(IO)在Master端   要实现Mysql的复制必须首先打开Master端的binary log(也就是二进制日志)否则无法实现.  Mysql复制基本过程如下:    (1)Slave上面的IO 线程链接上Master,并且请求指定日志文件的位置(或者 

学一点 MYSQL 双机异地热备份—-MYSQL主从,主主备份原理及实践

简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换到另一个. 2. 可以做负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量.  对于异地热备,尤其适合灾备.废话不多说了.我们直接进入主题. 我们会主要介绍两部分内容: 一, mysql 备份工作原理 二, 备份实战 我们开始. 我使用的是my