Mysql-Mysql高级-索引优化介绍(4)- 主从复制

本文详细介绍了Mysql主从复制的概念、作用及原理。包括主从复制的三种线程工作流程,复制过程中存在的延时问题及配置步骤。适合希望了解Mysql高可用架构的技术人员阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql高级

主从复制
概念
  • 什么是主从复制
    • 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,从数据库一般是准实时数据库。
  • 主从复制的作用
    • 做数据的热备份,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
    • 架构的扩展,随着业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低单机IO访问的频率,提高单个机器的IO性能
    • 读写分离,使数据库能支撑更大的并发。在报表中尤其重要,由于部分报表sql非常慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证前台速度
复制的基本原理
  • slave会从master读取binlog来进行数据同步

  • 生产环境中,读写分离的情况,master用于写,slave用于读取,由于mysql主从复制存在三个线程的io操作,所以存在延时,那么在读写分离的系统同,刚插入一条数据,立马去读取是读取不到的(延时是毫秒级的)

  • mysql主从复制的三步骤

    • master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
    • slave将master的binary log events拷贝到它的中继日志中(relay log)
    • slave重做中级日志中的事件,将改变应用到自己的数据库中。mysql复制是异步的且串行化的。
  • 原理

    • 数据库有个bin-log二进制文件,记录了所有的sql语句
    • 目标就是把主数据库的bin-log文件的sql复制到从数据库
    • 在从数据库的relay-log重做日志文件中再执行一遍这些sql语句
    • 主从复制需要三个线程
      • binlog输出线程,每当从数据库连接到主库的时候,主库都会创建一个线程然后发送bin-log内容到从库
      • 在从库里,当复制开始的时候,从库会创建两个线程
      • 从库IO线程,当start slave语句在从库开始执行之后,从库创建一个io线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库IO线程读取主库的binlog输出线程发送binlog文件内容更新,拷贝这些更新到本地文件,其中包括relay log文件
      • 从库的SQL线程,从库创建一个sql线程,这个线程读取从库IO线程写到relay log文件中的更新,然后执行这个更新并执行
      • 可以知道,对于每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog
  • 在这里插入图片描述

    • 解析
      • 步骤一:主库db的更新事件(update,insert,delete)被写到binlog
      • 步骤二:从库发起连接,连接到主库
      • 步骤三:从库连接成功后,主库创建一个binlog dump thread,把binlog的内容发送到从库
      • 步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入relay log
      • 步骤五:从库还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db中。
复制的基本原则
  • 每个slave只有一个master
  • 每个slave只能有唯一的服务器ID
  • 每个master可有多个slave
复制的最大问题

延时

主-从常见配置
  • 步骤

    • mysql版本一致后以服务运行
    • 主从都配置在[mysqld]节点下,都是小写
  • 主机修改my.cnf配置文件

    • 主服务器唯一ID
    • 启用二进制日志
      • log-bin=本地的路径/data/mysqlbin
        • log-bin=/usr/local/mysql/data/mysqlbin
    • 设置不要复制的数据库
      • binlog-ignore-db=mysql
    • 设置需要赋值的数据库
      • binlog-do-db=jl
    • 设置logbin格式
      • binlog_format=STATEMENT(默认)
      • binlog_format=ROW
  • mysql主从复制起始时,从机不继承主机的数据

  • 从机配置文件修改my.cnf的[mysqld]栏位下

    • server-id=2
    • relay-log=mysql-relay
  • 因修改过配置文件,主机和从机都要重启后台mysql服务

  • 主机从机都要关闭防火墙

  • 在centos主机上建立账户并授权slave

    • GRANT REPLICATION SLAVE ON * . * TO ‘zhangsan’@‘从机数据库IP’ IDENTIFIED BY ‘123456’;
    • 查看master的状态
      • 命令:show master status;
      • 记录下结果中 File和Position的值
      • 执行完此步骤后,不要操作主服务器mysql,防止主服务状态值变化
  • 在windows从机上配置需要复制的主机

    • 通过命令

      • change master to
        master_host='主机IP',
        master_user='zhangsan',
        master_password='密码',
        master_log_file='前面masterfile的名字',
        master_log_pos='Position的数字';
        
    • 启动从服务器的复制功能

      • start slave
    • 查看从服务器的slave状态

      • 命令show slave status
        • 当slave_io_running:yes
        • slave_sql_running:yes
        • 表示启动成功
  • 停止主从复制功能

    • stop slave;
  • 如何重写配置主从

    • stop slave;
    • reset master;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值