广告
返回顶部
首页 > 资讯 > 数据库 >MySQL主从复制原理及必备知识总结
  • 412
分享到

MySQL主从复制原理及必备知识总结

2024-04-02 19:04:59 412人浏览 安东尼
摘要

本文主要是关于Mysql主从复制的一些原理以及必备知识的梳理,关于mysql主从环境的搭建可参考另一篇博客:Mysql主从复制环境部署【Http://blog.itpub.net/31015730/

本文主要是关于Mysql主从复制的一些原理以及必备知识的梳理,关于mysql主从环境的搭建可参考另一篇博客:Mysql主从复制环境部署【Http://blog.itpub.net/31015730/viewspace-2153251/】

Mysql复制概念说明

Mysql内建的复制功能是构建大型、高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封并等待主服务器通知新的更新。


需要注意的是:

在进行mysql复制时,所有对复制中的表的更新必须在主服务器上进行。否则必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。


1、Mysql支持那些复制
(1)基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。 
(2)基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
(3)混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。


2、Mysql复制能解决的问题
(1)数据分布 (Data distribution )
(2)负载平衡(load balancing)
(3)数据备份(Backups) ,保证数据安全
(4)高可用性和容错行(High availability and failover)
(5)实现读写分离,缓解数据库压力


3、Mysql主从复制原理

master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;salve服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件,同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。


注意:

1--master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog功能)。
2--slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。
3--Mysql复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
4--Mysql复制最好确保master和slave服务器上的Mysql版本相同(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本)
5--master和slave两节点间时间需同步


Mysql复制的流程图如下:

MySQL主从复制原理及必备知识总结 

如上图所示:

第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

第二部分就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
   此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

 

4、Mysql复制的模式
(1)主从复制:主库授权从库远程连接,读取binlog日志并更新到本地数据库的过程;主库写数据后,从库会自动同步过来(从库跟着主库变);
(2)主主复制:主从相互授权连接,读取对方binlog日志并更新到本地数据库的过程;只要对方数据改变,自己就跟着改变;


5、Mysql主从复制的优点
(1)在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)
(2)在从主服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)
(3)当主服务器出现问题时,可以切换到从服务器。(提升性能)


6、Mysql主从复制工作流程细节
(1)MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器上已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器定位到从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。

(2)MySQL使用3个线程来执行复制功能,其中两个线程(Sql线程和IO线程)在从服务器,另外一个线程(IO线程)在主服务器。

当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以即为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,由从服务器创建,用于读取中继日志并执行日志中包含的更新。在从服务器上,读取和执行更新语句被分成两个独立的任务。当从服务器启动时,其I/O线程可以很快地从主服务器索取所有二进制日志内容,即使SQL线程执行更新的远远滞后。

 

7、知识点总结


主从数据完成同步的过程:

MySQL主从复制原理及必备知识总结 

1)在Slave 服务器上执行sart slave命令开启主从复制开关,开始进行主从复制。

2)此时,Slave服务器的IO线程会通过在master上已经授权的复制用户权限请求连接master服务器,并请求从执行binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容

3)Master服务器接收到来自Slave服务器的IO线程的请求后,其上负责复制的IO线程会根据Slave服务器的IO线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。返回的信息中除了binlog日志内容外,还有在Master服务器端记录的IO线程。返回的信息中除了binlog中的下一个指定更新位置。

4)当Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件(Mysql-relay-bin.xxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master端新binlog日志时能告诉Master服务器从新binlog日志的指定文件及位置开始读取新的binlog日志内容

5)Slave服务器端的SQL线程会实时检测本地Relay Log 中IO线程新增的日志内容,然后及时把Relay LOG 文件中的内容解析成sql语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这样sql语句,并在relay-log.info中记录当前应用中继日志的文件名和位置点


主从复制必须条件

1)开启Binlog功能

2)主库要建立账号

3)从库要配置master.info(CHANGE MASTER to...相当于配置密码文件和Master的相关信息)

4)start slave 开启复制功能


主从复制需要了解的:

1)3个线程,主库IO,从库IO和SQL及作用

2)master.info(从库)作用

3)relay-log 作用

4)异步复制

5)binlog作用(如果需要级联需要开启Binlog)


注意事项:

1)主从复制是异步的逻辑的SQL语句级的复制

2)复制时,主库有一个I/O线程,从库有两个线程,I/O和SQL线程

3)实现主从复制的必要条件是主库要开启记录binlog功能

4)作为复制的所有Mysql节点的server-id都不能相同

5)binlog文件只记录对数据库有更改的SQL语句(来自主库内容的变更),不记录任何查询(select,show)语句


彻底解除主从复制关系

1)stop slave;

2)reset slave; 或直接删除master.info和relay-log.info这两个文件;

3)修改my.cnf删除主从相关配置参数。


让slave不随MySQL自动启动

修改my.cnf 在[mysqld]中增加 skip-slave-start 选项。


做了MySQL主从复制以后,使用mysqldump对数据备份时,一定要注意按照如下方式:

mysqldump --master-data --single-transaction --user=username --passWord=password dbname> dumpfilename

这样就可以保留 file 和 position 的信息,在新搭建一个slave的时候,还原完数据库, file 和 position 的信息也随之更新,接着再start slave 就可以很迅速的完成增量同步!


需要限定同步哪些数据库,有3个思路:

1)在执行grant授权的时候就限定数据库;

2)在主服务器上限定binlog_do_db = 数据库名;

3)主服务器上不限定数据库,在从服务器上限定replicate-do-db = 数据库名;


如果想实现 主-从(主)-从 这样的链条式结构,需要设置:

log-slave-updates      只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器。

当然,二进制日志也是必须开启的:

log-bin=/opt/mysql/binlogs/bin-log

log-bin-index=/opt/mysql/binlogs/bin-log.index

 

还可以设置一个log保存周期:

expire_logs_days=14


生产场景下轻松部署MySQL主从复制

快速步骤MySQL主从复制

1)安装好配置从库的数据库,配置好log-bin和server-id参数

2)无需配置主库my.cnf,主库的log-bin和server-id参数默认就是配置好的。

3)登录主库,增加从库连接同步的账户,例如:rep,并授权replication同步的权限

4)使用mysqldump命令带-x和–master-data=2的命令及参数全备数据,把它恢复到从库

5)从库执行CHANGE MASTER TO….语句,需要binlog文件及对应点(因为–master-data=2已经带了)

6)从库开启同步开关,start slave

7)从库show slave status\G,检查同步状态,并在主库更新测试


主库I/O工作状态

主库I/O 线程工作状态

解释说明

Sending binlog event to slave

线程已经从二进制binlog日志读取了一个事件并且正将它发送到从服务器

Finished reading one binlog;switching to next binlog

线程已经读完二进制binlog日志文件,并且整打开下一个要发送到从服务器的binlog日志文件

Master Has sent all binlog to slave;waiting for binlog to be updated

线程已经从binlog日志读取所有更新并已经发送到了从数据库服务器。线程现在为空闲状态,等待由主服务器上二进制binlog日志中的新事件更新。

Waiting to finalize termination

线程停止时发送的一个很简单的状态


从库I/O线程工作状态show processlist;

从库I/O线程工作状态

解释说明

Connecting to master

线程正试图连接主服务器

Checking master version

同步主服务器之间建立后临时出现的状态

ReGIStering slave to master

Requesting binlog dump

建库同主服务器之间的连接后立即临时出现的状态,线程向主服务器发送一条请求,索取从请求的二进制binlog日志文件名和位置开始的二进制binlog日志的内容

Waiting to reconnect after a failed binlog dump request

如果二进制binlog日志转存储请求失败,线程进行睡眠状态,尝试重新连接

Reading event from the relay log

线程已经从中继日志读取了一个事件,可以对事件进行处理了。

Slave Has read all relay log;waiting for the slave I/O thread to update it

线程已经处理了中继日志文件中的所有事件,现在等待I.O线程将新事件写入中继日志

Waiting for slave mutex on exit

线程停止时发生了一个很简单的状态

 文章连接:http://www.cnblogs.com/kevingrace/p/6256603.html

 

相关连接:
MySQL主从复制环境部署:【http://blog.itpub.net/31015730/viewspace-2153251/】
MySQL多实例环境部署:【http://blog.itpub.net/31015730/viewspace-2153184/】
安装mysql数据库及问题解决方法:【http://blog.itpub.net/31015730/viewspace-2152272/】



作者:SEian.G(苦练七十二变,笑对八十一难)


您可能感兴趣的文档:

--结束END--

本文标题: MySQL主从复制原理及必备知识总结

本文链接: https://www.lsjlt.com/news/46255.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL主从复制原理及必备知识总结
    本文主要是关于mysql主从复制的一些原理以及必备知识的梳理,关于mysql主从环境的搭建可参考另一篇博客:MySQL主从复制环境部署【http://blog.itpub.net/31015730/...
    99+
    2022-10-18
  • Mysql主从备份及恢复总结
     Mysql主从实现 1、配置主从节点的服务配置文件 1.1、配置master节点:[mysqld]binlog_format=mixedlog-bin=master-bins...
    99+
    2022-10-18
  • MYSQL完全备份、主从复制、级联复制、半同步的知识点总结
    本篇内容介绍了“MYSQL完全备份、主从复制、级联复制、半同步的知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,...
    99+
    2022-10-18
  • MySQL 主从复制及原理
    1.主从复制配置a. 环境:CentOS7.4,IP地址分别是主库:192.168.11.146,从库:192.168.11.238,主库版本应低于或等于从库版本,这里用的都是MySQL 8.0.13b.主...
    99+
    2022-10-18
  • MYSQL的主从复制知识点整理
    当单台MYSQL服务器无法满足当前网站流量时的优化方案。需要搭建mysql集群技术。 一、功能: 当向主服务器插入|修改|删除数据时,数据会自动同步到从服务器。 注意:主从复制是单向的,只能主 -> ...
    99+
    2022-10-18
  • MySQL 主从复制原理及搭建
    一.主从复制的工作过程:二.MySQL复制类型基于SQL语句的复制基于行的复制混合复制三.实验环境  OS:CentOS 6.5 x64  master:192.168.0.134&nb...
    99+
    2022-10-18
  • MySQL主从复制问题总结及排查过程
    目录一、概述二、mysql主从复制原理1.MYSQL主从复制过程三、问题及解决方法1.show slave status \G 显示如下报错信息2.根据提示信息定位报错位置四、通用解...
    99+
    2022-11-13
  • MySQL主从复制的配置及原理
    -----------------------------------------------------------mysql 5.5   环境用的数据库可的多实例----------...
    99+
    2022-10-18
  • 初识MariaDB之5——主从复制原理及部署
    一、原理简介当前主流的数据库为了保证数据一致性,都采用支持事务类型的数据存储引擎,如innodb等,当一个事务提交后先写到事务日志中,在进行数据修改,并且将对数据产生任何影响的语句都记录在二进制日志中,主从...
    99+
    2022-10-18
  • MySQL GTID 主从复制的原理及配置
        GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成。这个全局事务ID不仅仅在原始服务器器上唯一,在所有存在主从关系 ...
    99+
    2022-10-18
  • MySql主从复制实现原理及配置
    数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个...
    99+
    2022-05-18
    MySql 主从复制
  • MySQL数据库主从复制原理及作用分析
    目录1.数据库主从分类:2.mysql主从介绍由来3.主从作用4.主从复制原理5.主从复制配置(数据一致时)5.1主从服务器分别安装mysql5.75.2主数据库与从数据库数据一致5...
    99+
    2022-11-12
  • MySQL主从复制原理以及需要注意的地方
    写在前面 最近在写Mycat专题,由于不少小伙伴最近要出去面试,问我能不能简单写下MySQL的主从复制原理和注意事项,因为在之前的面试中被问到了这些问题。我:可以啊,安排上了!! 主从复制原理 (1) Master ...
    99+
    2022-05-13
    MySQL 主从复制 MySQL 主从复制原理 MySQL 主从复制注意事项
  • MySQL主从复制与读写分离原理及用法详解
    本文实例讲述了MySQL主从复制与读写分离原理及用法。分享给大家供大家参考,具体如下: 主从复制 概念 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。 假设,实时的将变化了的...
    99+
    2022-10-18
  • MySQL主从复制的原理图解及Java语言示例使用
    目录概述主从复制原理主从复制模式主从同步实战总结概述 实际生产的过程中为了实现数据库的高可用,不会只有一个数据库节点。至少会搭建主从复制的数据库架构,从库可以作为主库的数据备份,以免主数据库损坏的情况下丢失数据;当访问量...
    99+
    2022-08-12
    MySQL主从复制 MySQL主从复制原理
  • 高性能Mysql主从架构的复制原理及配置示例
    这篇文章主要介绍了高性能Mysql主从架构的复制原理及配置示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1 复制概述Mysql内建的复制...
    99+
    2022-10-18
  • 快速笔记02-MySQL主从复制原理半同步操作步骤及原理
    ==========================================================一:MySQL主从复制规划主库:(MySQL master) IP:1...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作