mysql数据库主从同步复制原理

MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能、更高可靠性要求的场合。与之对应的是另一个同步技术是MySQL Cluster,但因为MySQL Cluster配置比较复杂,所以使用者较少。

MySQL的Replication是一个异步复制的过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),它是从一个Mysql instance(instance英文为实例)(我们称之为Master)复制到另一个Mysql instance(我们称之slave)。在master与slave之间实现整个复制过程主要由三个线程来完成,其中两个线程(SQL线程和IO线程)在slave端,另外一个线程(IO线程)在master端。

要实现MySQL的Replication,首先必须打开master端的binlog (mysql-bin.xxxxxx)日志功能,否则无法实现mysql的主从复制。因为mysql的整个主从复制过程实际上就是:slave端从master端获取binlog日志,然后再在自己身上完全顺序的执行该日志中所记录的各种SQL操作。

有关具体如何开启mysql的binlog日志功能,可以查看这篇文章《烂泥:学习mysql的binlog配置》。

MySQL主从复制的基本交互过程,如下:

1、slave端的IO线程连接上master端,并请求从指定binlog日志文件的指定pos节点位置(或者从最开始的日志)开始复制之后的日志内容。

2、master端在接收到来自slave端的IO线程请求后,通知负责复制进程的IO线程,根据slave端IO线程的请求信息,读取指定binlog日志指定pos节点位置之后的日志信息,然后返回给slave端的IO线程。该返回信息中除了binlog日志所包含的信息之外,还包括本次返回的信息在master端的binlog文件名以及在该binlog日志中的pos节点位置。

3、slave端的IO线程在接收到master端IO返回的信息后,将接收到的binlog日志内容依次写入到slave端的relaylog文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的master端的binlog文件名和pos节点位置记录到master-info(该文件存在slave端)文件中,以便在下一次读取的时候能够清楚的告诉master“我需要从哪个binlog文件的哪个pos节点位置开始,请把此节点以后的日志内容发给我”。

4、slave端的SQL线程在检测到relaylog文件中新增内容后,会马上解析该log文件中的内容。然后还原成在master端真实执行的那些SQL语句,并在自身按顺丰依次执行这些SQL语句。这样,实际上就是在master端和slave端执行了同样的SQL语句,所以master端和slave端的数据是完全一样的。

以上mysql主从复制交互过程比较拗口,理解起来也比较麻烦,我简化了该交互过程。如下:

1、master在执行sql之后,记录二进制log文件(bin-log)。

2、slave连接master,并从master获取binlog,存于本地relay-log中,然后从上次记住的位置起执行SQL语句,一旦遇到错误则停止同步。

从以上mysql的Replication原理可以看出:

* 主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间主从数据不一致的情况。

* 如果主从的网络断开,则从库会在网络恢复正常后,批量进行同步。

* 如果对从库进行修改数据,那么如果此时从库正在在执行主库的bin-log时,则会出现错误而停止同步,这个是很危险的操作。所以一般情况下,我们要非常小心的修改从库上的数据。

* 一个衍生的配置是双主、互为主从配置,只要双方的修改不冲突,则可以工作良好。

* 如果需要多主库的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。

本文出自 “烂泥行天下” 博客,请务必保留此出处http://ilanni.blog.51cto.com/526870/1580625

时间: 2025-01-03 16:06:54

mysql数据库主从同步复制原理的相关文章

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

本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQL Cluster,但因为MySQL Cluster配置比较复杂,所以使用者较少. MySQL的Replication是一个异步复制的过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),它是从一个Mysql

MySQL数据库主从同步复制

主数据库:192.168.1.31/24vim /etc/my.cnf[mysqld]datadir=/usr/local/mysql/data/socket=/tmp/mysql.sock #master and slave#启用二进制日志log-bin=mysql-bin-master#本机数据库ID 标示server-id=1#可以被从服务器复制的库,二进制日志需要同步的数据库名binlog-do-db=test#不可以被从服务器复制的库binlog-ignore-db=mysql [my

mysql数据库主从同步配置教程--数据库同步

背景: 最近有一个mysql数据库同步的需求,我用了mysql主从同步的方法来实现.下面把步骤记录一下. 环境和拓扑 操作系统:Centos6.6 X64 mysql版本:5.1.73 Master: 10.6.1.210 Slave:  10.6.1.211 需求: 实现Master上test库同步到Slave上,但是禁止同步该库下的AA表 1.配置Master上的my.cnf #vim  /etc/my.cnf 添加内容到[mysqld]下,设定只同步test 数据库: [mysqld] l

谈谈Mysql数据库主从同步延迟分析及解决方案

一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 log dump 线程,用来给从库I/O线程读取binlog: 3. 从库的I/O Thread去请求主库的binlog,并将得到的binlog日志写到relay log文件中: 4. 从库的SQL Thread会读取relay log文件中的日志解析成具体操作,将主库的DDL和DML操作事件重放. 关

mysql数据库主从同步

环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168.108.140 1.导出主服务数据,将主备初始数据同步 master: //从master上导出需要同步的数据库信息 mysqldump -u*** -p*** --database test > test.sql //将master上的备份信息传输到slave上 scp /root/test.sq

mysql数据库主从同步(交互式)

mysql数据库主从同步交互式配置步骤,本文以一台mysql数据库多实例3306和3307为例进行配置,3306为主库,3307为从库(多台单实例与一台多实例配置是一样的) 一.my.cnf文件配置 1.修改my.cnf配置文件,主数据库3306要打开log-bin,server-id不能一样 [[email protected] ~]# egrep"log-bin|server-id" /data/{3306,3307}/my.cnf /data/3306/my.cnf:log-bi

MySQL数据库主从同步部署

MySQL数据库主从同步部署: 环境 Mater:   CentOS6.4  mysql5.5.38  192.168.107.133 Slave:   CentOS6.4  mysql5.5.38  192.168.107.135 1.导出主服务数据,将主备初始数据同步 master: //从master上导出需要同步的数据库信息 mysqldump -u*** -p*** --database test > test.sql //将master上的备份信息传输到slave上 scp /roo

linux下mysql数据库主从同步配置

说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备篇: 说明:在两台MySQL服务器192.168.21.128和192.168.21.129上分别进行如下操作 备注: 作为主从服务器的MySQL版本建议使用同一版本! 或者必须保证主服务器的MySQL版本要高于从服务器的MySQL版本! 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接

Mysql数据库主从同步(复制)热备份

随着大数据的发展,数据的安全问题日益凸显,往常不被重视的数据库维护变得必不可缺,数据的灾备变成个各大企业/个人站长业务运行中必须重视的环节.上一篇文章提到了自动化备份避灾的几种方案及选择,今天就来实践一下主从/双向异地热备份方案. Mysql数据库同步(复制)的概念,主从同步使得数据可以从一个服务器无缝迁移复制到另一台服务器.这个过程中一台服务器充当主服务器(master),另一台或另外多台充当从服务器(slave).复制进程I/O是异步进行的,所以服务器不需要一直保持关联的状态. Mysql数