您的位置:首页 > 教程 > Mysql/MariaDB > MySQL主从复制原理详情

MySQL主从复制原理详情

2022-06-17 11:14:23 来源:易采站长站 作者:

MySQL主从复制原理详情

目录
前言:一、为什么需要主从复制?二、什么是mysql的主从复制?三、mysql复制原理具体步骤四、mysql主从同步延时分析五、主从复制的配置1、基础设置准备2、安装mysql数据库3、在两台数据库中分别创建数据库4、在主(node1)服务器进行如下配置:5、配置从(node2)服务器登录主服务器的账号授权6、从(node2)服务器的配置7、重启主服务器的mysqld服务8、重启从服务器并进行相关配置

lfe站长之家-易采站长站-Easck.Com

前言:

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

lfe站长之家-易采站长站-Easck.Com

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

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

    lfe站长之家-易采站长站-Easck.Com

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

    MySQL>

    lfe站长之家-易采站长站-Easck.Com

    三、mysql复制原理

    原理:lfe站长之家-易采站长站-Easck.Com

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

      也就是说:lfe站长之家-易采站长站-Easck.Com

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

        注意:lfe站长之家-易采站长站-Easck.Com

          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两节点间时间需同步。

          lfe站长之家-易采站长站-Easck.Com

          图来源《高性能mysql》lfe站长之家-易采站长站-Easck.Com

          lfe站长之家-易采站长站-Easck.Com

          具体步骤

            1、从库通过手工执行change>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。

            lfe站长之家-易采站长站-Easck.Com

            四、mysql主从同步延时分析

            mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高,slave的sql>

            解决方案:lfe站长之家-易采站长站-Easck.Com

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

              mysql5.7之后使用MTS并行复制技术,永久解决复制延时问题 这个后面文章在说下吧lfe站长之家-易采站长站-Easck.Com

              lfe站长之家-易采站长站-Easck.Com

              五、主从复制的配置

              lfe站长之家-易采站长站-Easck.Com

              1、基础设置准备

              本次测试mysql的版本是5.7.>

              测试阶段两个mysql实例IP相同都是本机(ip=127.0.0.1),区分下分别命名 主是node1,从是node2,端口不同 我实际测试用的是3306和3307)lfe站长之家-易采站长站-Easck.Com

              lfe站长之家-易采站长站-Easck.Com

              2、安装mysql数据库

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

              lfe站长之家-易采站长站-Easck.Com

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

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

              lfe站长之家-易采站长站-Easck.Com

              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指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。lfe站长之家-易采站长站-Easck.Com

              lfe站长之家-易采站长站-Easck.Com

              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;

              lfe站长之家-易采站长站-Easck.Com

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

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

              lfe站长之家-易采站长站-Easck.Com

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

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

              lfe站长之家-易采站长站-Easck.Com

              lfe站长之家-易采站长站-Easck.Com

              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 #(注意没有分号)

              这样主从的配置已经完成,此时可以在主服务器进行相关的数据添加删除工作,在从服务器看相关的状态,查看对应数据有没有变化。lfe站长之家-易采站长站-Easck.Com

              到此这篇关于MySQL主从复制原理详情的文章就介绍到这了,更多相关MySQL主从复制内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!lfe站长之家-易采站长站-Easck.Com

              如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • mysql 5.7.30安装配置方法图文教程

    mysql 5.7.30安装配置方法图文教程

    之前把服务器里面的MySQL卸了重装,安装mysql时未做总结,换新电脑,补上安装记录,安装的时候,找了些网友的安装记录,发现好多坑 截个图,作为笔记,也正好留给需要的朋友们。
    2019-01-03
  • MySQL5.6免安装版环境配置图文教程

    MySQL5.6免安装版环境配置图文教程

    MySQL是一个小巧玲珑但功能强大的数据库,目前十分流行。但是官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的。很多人下了zip格式的解压发现没有setup.exe,面对一堆文
    2019-01-04
  • Linux下安装mysql-8.0.20的教程详解

    Linux下安装mysql-8.0.20的教程详解

    ** Linux下安装mysql-8.0.20 ** 环境介绍 操作系统:CentOS 7 mysql下载地址:https://dev.mysql.com/downloads/mysql/ 下载版本:mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz 卸载mysql 查看是否安装过mysql,命令:fin
    2020-05-24
  • linux环境下安装mysql数据库的详细教程

    linux环境下安装mysql数据库的详细教程

    1.安装数据库 1)yum -y install mysql-server(简单) yum命令自动从网上寻找mysql服务资源,下载至本地并完成安装 2)也可以自己在网上下载mysql服务,通过xftp传输至Linux系统,自己安装(一般安
    2020-06-20
  • MySQL8.0.20安装教程及其安装问题详细教程

    MySQL8.0.20安装教程及其安装问题详细教程

    原文地址:https://blog.csdn.net/m0_46579864/article/details/105981304 官网下载MySQL的安装包 1.下载链接如下: MySQL8.0.20版本 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-20.html 其他版本:MySQL8.0.16版本
    2020-05-10
  • MySQL对数据库操作(创建、选择、删除)

    MySQL对数据库操作(创建、选择、删除)

    MySQL 创建数据库 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: CREATE DATABASE 数据库名; 以下命令简单的演示了创建数据库的过程,数据名为 RUNOOB: [root@host]# mysql
    2020-07-01
  • Linux系统MySQL8.0.19快速安装配置教程图解

    Linux系统MySQL8.0.19快速安装配置教程图解

    一、环境介绍 Linux系统使用yum安装MySQL需要从网上下载MySQL的一系列组件,这个过程非常耗时且有下载中断的可能,如果想要快速安装MySQL,可以先在网上将MySQL的离线包下载下来传到系
    2020-02-27
  • mysql 加了 skip-name-resolve不能链接数据库问题的解决方法

    mysql 加了 skip-name-resolve不能链接数据库问题的解决方法

    mysql 加了 skip-name-resolve不能链接的问题, 要确认 MySql 是否采用过主机名的授权 在 MySql Server 的配置文件 My.ini 中,增加如下两行: [mysqld] skip-name-resolve 它将禁止 MySql Server 对外部连接进
    2019-01-04