返回顶部
首页 > 资讯 > 数据库 >MySQL主从复制原理详情
  • 216
分享到

MySQL主从复制原理详情

2024-04-02 19:04:59 216人浏览 八月长安
摘要

目录前言:一、为什么需要主从复制?二、什么是Mysql的主从复制?三、mysql复制原理具体步骤四、mysql主从同步延时分析五、主从复制的配置1、基础设置准备2、安装mysql数据

前言:

对于现在的系统来说,在业务复杂的系统中,数据库往往是应用的瓶颈,单机往往是不能扛住大型系统的并发压力的,这时候需要从数据库方面下手解决其瓶颈,例如sql语句需要表,导致暂时不能使用读的服务,那么就很影响运行中的业务。使用主从之后,从库的读操作是不受影响的。

一、为什么需要主从复制?

  • 1,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。
  • 2,架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
  • 3,主从多台服务器,同样也可以当作数据备份的。

二、什么是mysql的主从复制?

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库或者特定的表。

三、mysql复制原理

原理:

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

也就是说:

  • 从库会生成两个线程,一个I/O线程,一个SQL线程;
  • I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
  • 主库会生成一个log dump线程,用来给从库I/O线程传binlog;
  • SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;

注意:

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

图来源《高性能mysql》

具体步骤

  • 1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、passWord、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start slave
  • 2、从库的IO线程和主库的dump线程建立连接。
  • 3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求。
  • 4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。
  • 5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info中。
  • 6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay 会自动被清理purge。

四、mysql主从同步延时分析

mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高,slave的sql thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是随机的,不是顺序,所以成本要高很多,另一方面,由于sql thread也是单线程的,当主库的并发较高时,产生的DML数量超过slave的SQL thread所能处理的速度,或者当slave中有大型query语句产生了锁等待,那么延时就产生了。

解决方案:

  • 1.业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。
  • 2.单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。
  • 3.服务的基础架构在业务和mysql之间加入memcache或者Redis的cache层。降低mysql的读压力。
  • 4.不同业务的mysql物理上放在不同机器,分散压力。
  • 5.使用比主库更好的硬件设备作为slave,mysql压力小,延迟自然会变小。
  • 6.使用更加强劲的硬件设备。

mysql5.7之后使用MTS并行复制技术,永久解决复制延时问题 这个后面文章在说下吧

五、主从复制的配置

1、基础设置准备

本次测试mysql的版本是5.7. 比较穷,在一台机子上装了两个mysql实例,修改下不同端口即可。 当然如果有钱准备两台能互相访问的机子安装两个mysql也是可以的。

测试阶段两个mysql实例IP相同都是本机(ip=127.0.0.1),区分下分别命名 主是node1,从是node2,端口不同 我实际测试用的是3306和3307)

2、安装mysql数据库

网上很多按照的例子,这里就不重复说了,请自行百度/Google(结果是数据库能正常使用),待两台mysql都按照完成之后,我们开始配置主从复制了。

3、在两台数据库中分别创建数据库

--注意两台必须全部执行,两台的数据库保持相同
create database test;

4、在主(node1)服务器进行如下配置:

#修改配置文件,执行以下命令打开mysql配置文件
vi /etc/my.cnf
#在mysqld模块中添加如下配置信息
log-bin=master-bin #二进制文件名称
#二进制日志格式,有row、statement、mixed三种格式,
binlog-fORMat=ROW  
server-id=1   #要求各个服务器的id必须不一样
binlog-do-db=test   #同步的数据库名称

二进制日志格式,有row、statement、mixed三种格式; row指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍;statement指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高; mixed指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

5、配置从(node2)服务器登录主服务器的账号授权

--授权操作
set global validate_password_policy=0;
set global validate_password_length=1;
grant replication slave on *.* to 'root'@'%' identified by '123456';
--刷新权限
flush privileges;

6、从(node2)服务器的配置

#修改配置文件,执行以下命令打开mysql配置文件
vi /etc/my.cnf
#在mysqld模块中添加如下配置信息
log-bin=master-bin #二进制文件的名称
binlog-format=ROW  #二进制文件的格式
server-id=2 #服务器的id

7、重启主服务器的mysqld服务

#重启mysql服务
service mysqld restart
#登录mysql数据库
mysql -uroot -p
#查看master的状态
show master status;

8、重启从服务器并进行相关配置

#重启mysql服务
service mysqld restart
#登录mysql
mysql -uroot -p
#连接主服务器(master_host是主的IP地址,我测试本地)
change master to master_host='127.0.0.1',master_user='root',master_password='123456',master_port=3306,master_log_file='master-bin.000001',master_log_pos=154;
#启动slave
start slave
#查看slave的状态
show slave status\G #(注意没有分号)

这样主从的配置已经完成,此时可以在主服务器进行相关的数据添加删除工作,在从服务器看相关的状态,查看对应数据有没有变化。

到此这篇关于MySQL主从复制原理详情的文章就介绍到这了,更多相关MySQL主从复制内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL主从复制原理详情

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

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

猜你喜欢
  • MySQL主从复制原理详情
    目录前言:一、为什么需要主从复制?二、什么是mysql的主从复制?三、mysql复制原理具体步骤四、mysql主从同步延时分析五、主从复制的配置1、基础设置准备2、安装mysql数据...
    99+
    2024-04-02
  • mysql 主从复制原理
    主从形式mysql主从复制 灵活一主一从主主复制一主多从---扩展系统读取的性能,因为读是在从库读取的;多主一从---5.7开始支持联级复制--- 用途及条件 mysql主从复制用途实时...
    99+
    2024-04-02
  • mysql主从复制原理
    环境:3306 主库3307 从库1 设置server-id值并开启binlog功能参数编辑mysql的配置文件/data/3306/my.cnf[mysqld]server-id = 6   &...
    99+
    2024-04-02
  • MySQL 主从复制及原理
    1.主从复制配置a. 环境:CentOS7.4,IP地址分别是主库:192.168.11.146,从库:192.168.11.238,主库版本应低于或等于从库版本,这里用的都是MySQL 8.0.13b.主...
    99+
    2024-04-02
  • MySQL 主从复制原理与实践详解
    本文实例讲述了MySQL 主从复制原理与实践。分享给大家供大家参考,具体如下: 简介 MySQL 的主从复制又叫 Replication、AB 复制。至少需要两个 MySQL 服务(可以是同一台机器,也可以是不同机器...
    99+
    2022-05-11
    MySQL 主从复制
  • MySQL的主从复制原理详细分析
    目录前言一、主从复制概念二、读写分离的概念三、主库和从库1. 主库2. 从库四、主从复制的流程五、主从复制效果展示前言 在实际生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性...
    99+
    2022-07-14
    MySQL主从复制原理 MySQL主从复制
  • MySQL 主从复制原理及搭建
    一.主从复制的工作过程:二.MySQL复制类型基于SQL语句的复制基于行的复制混合复制三.实验环境  OS:CentOS 6.5 x64  master:192.168.0.134&nb...
    99+
    2024-04-02
  • mysql主从复制的工作原理
    这篇文章给大家分享的是有关mysql主从复制的工作原理的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql主从复制原理:首先主库发送更新事件到从库;然后从库读取更新记录,并执...
    99+
    2024-04-02
  • MySQL主从复制的原理分析
    本篇文章为大家展示了MySQL主从复制的原理分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。主从复制是怎么实现的呢更新语句会记录 binlog,它是一种逻辑日志。...
    99+
    2024-04-02
  • Mysql主从复制作用和工作原理详解
    一、什么是主从复制 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。在最常用的mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服...
    99+
    2024-04-02
  • Redis--主从复制原理
    前言: 和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Red...
    99+
    2024-04-02
  • mysql主从复制原理,主主复制时主键冲突解决
    主从复制原理: master的增删改记录写入binlog; slave的I/O Thread(负责读取master的binlog)读取binlog并将记录写入relaylog; slave的sql thread读取relaylog...
    99+
    2018-09-26
    mysql主从复制原理,主主复制时主键冲突解决
  • 浅谈Redis主从复制以及主从复制原理
    目录面临问题解决办法主从复制主从复制的作用主从复制启用面临问题 1. 机器故障。我们部署到一台 Redis 服务器,当发生机器故障时,需要迁移到另外一台服务器并且要保证数据是同步的。...
    99+
    2024-04-02
  • MySQL 主从复制的原理和配置
    工作原理图: 主从复制的原理: 分为同步复制和异步复制,实际复制架构中大部分为异步复制。 复制的基本过程如下: 1).Slave上面的IO进程连接上Master,并请求从指定日志文件的指...
    99+
    2022-05-26
    MySQL 主从复制 配置
  • mysql主从复制的工作原理图
    本文主要给大家介绍mysql主从复制的工作原理图,文章内容对大家的参考意义还是比较大的,下面跟笔者一起了解下mysql主从复制的工作原理图吧。  看完以上关于mysql主从复制的工作原理...
    99+
    2024-04-02
  • MySQL主从复制的原理和作用
    这篇文章将为大家详细讲解有关MySQL主从复制的原理和作用,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先数据库有个“bin-log”二进制文件,记录了所有SQL语句;...
    99+
    2024-04-02
  • MySQL主从复制的配置及原理
    -----------------------------------------------------------mysql 5.5   环境用的数据库可的多实例----------...
    99+
    2024-04-02
  • MySQL中主从复制的原理分析
    今天就跟大家聊聊有关MySQL中主从复制的原理分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.1.1 MySQL主从复制介绍MySQL数据库支...
    99+
    2024-04-02
  • mysql主从复制的原理是什么
    mysql主从复制的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、说明主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据...
    99+
    2023-06-15
  • mysql主从复制的原理有什么
    mysql主从复制的原理有什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、说明mysql数据库提供了主从备份机制,实际上是将主数据库的所有数据同时写入备份...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作