• MySQL主从复制


    MySQL主从复制

    在实际生产环境中,面对巨大的并发量和数据读写压力,我们往往需要多台数据库服务器来提共服务,并且将读和写的的压力分担到不同的服务器上,以满足在安全性与高可用性上的需求。

    主从复制原理

    MySQL 的主从复制和 MySQL 的读写分离两者有着紧密联系,首先要部署主从复制,
    只有主从复制完成了,才能在此基础上进行数据的读写分离。

    MySQL支持的复制类型

    • 基于语句的复制(STATEMENT)。
      在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。
    • 基于行的复制(ROW)。
      把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
    • 混合类型的复制(MIXED)。
      默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

    主从复制的工作过程

    核心:两个日志,三个线程
    两个日志:二进制日志、中继日志
    三个线程:I/O、dump、sql
    主要原理:Master将数据保存在二进制日志中,I/O向dump发出同步请求,dump把数据发送给I/O线程,I/O写入本地的中继日志数据,同步到自己数据库中,完成同步。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NuGOC8Pe-1664076164651)(F:\typorase\jpg\493.png)]

    • 主MySQL服务器做的增删改操作,都会写入自己的二进制日志(Binary log)
    • 然后从MySQL从服务器打开自己的I/O线程连接主服务器,进行读取主服务器的二进制日志
    • I/O去监听二进制日志,一旦有新的数据,会发起请求连接
    • 这时候会触发dump线程,dump thread响应请求,传送数据给I/O(dump线程要么处于等待,要么处于睡眠)
    • I/O接收到数据之后存放在中继日志
    • SQL thread线程会读取中继日志里的数据,存放到自己的服务器中。
    1. 在每个事务更新数据完成之前,Master在二进制日志(Binary log)记录这些改变。写入二进制日志完成后,Master通知存储引擎提交事务。
    2. Slave 将Master复制到其中继日志(Relay log),首先slave开始一个工作线程(I/O),I/O线程在Master上打开一个普通的连接,然后开始Binlog dump process。Binlog dump process从Master的二进制日志中读取事件,如果已经跟上Master,它会睡眠并等待Master产生新的事件,I/O线程将这些事件写入中继日志。
    3. SQL slave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新slave数据,使其与Master中的数据一致,只要该线程与I/O线程保持一致。

    配置主从复制

    主服务器:192.168.116.137

    从服务器1:192.168.116.138

    从服务器2:192.168.116.139

    进行服务器时间同步

    #关闭防火墙
    systemctl stop firewalld
    setenforce 0
    
    ntpdate ntp1.aliyun.com
    

    配置主服务器

    vim /etc/my.cnf
    
    log-bin=master-bin        #开启二进制日志
    binlog_format=MIXED       #二进制日志格式
    log-slave-updates=true    #开启从服务器同步
    
    systemctl restart mysqld.service
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wEoZ63Ut-1664076164652)(F:\typorase\jpg\499.png)]

    给从服务器授权
    grant replication slave on *.* to 'myslave'@'192.168.116.%' identified by '123456';
    #刷新
    flush privileges;
    #查看主服务器二进制文件
    show master status;
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MqrA2Fdy-1664076164652)(F:\typorase\jpg\500.png)]

    配置从服务器1

    vim /etc/my.cnf
    
    server-id = 2           ##slave1和slave2的id不能相同
    log-bin=master-bin
    relay-log=relay-log-bin
    relay-log-index=slave-relay-bin.index
    
    systemctl restart mysqld.service
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Hq1KrLw-1664076164652)(F:\typorase\jpg\501.png)]

    change master to master_host='192.168.116.137',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;
    
    flush privileges;    #刷新
    start slave;         #开启
    show slave status\G  #查看
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHSzrjZC-1664076164652)(F:\typorase\jpg\502.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8iQeOsfh-1664076164653)(F:\typorase\jpg\503.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WovXye7g-1664076164653)(F:\typorase\jpg\504.png)]

    配置从服务器2

    vim /etc/my.cnf
    
    server-id = 3           ##同一集群的slave ID不能相同
    log-bin=master-bin
    relay-log=relay-log-bin
    relay-log-index=slave-relay-bin.index
    
    systemctl restart mysqld.service
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bzWb6i8Y-1664076164653)(F:\typorase\jpg\505.png)]

    change master to master_host='192.168.116.137',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;
    
    flush privileges;    #刷新
    start slave;         #开启
    show slave status\G  #查看
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KrRgXQg5-1664076164654)(F:\typorase\jpg\506.png)]

    验证

    在主服务器中写入一些数据

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2RcpUyP3-1664076164654)(F:\typorase\jpg\507.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QWYrHk4h-1664076164654)(F:\typorase\jpg\508.png)]

    在第一个从服务器上查看,数据已经同步过来

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2sThRCwf-1664076164654)(F:\typorase\jpg\509.png)]

    在第二个从服务器上查看,数据已经同步过来

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FK74ABQV-1664076164654)(F:\typorase\jpg\510.png)]

  • 相关阅读:
    计算机毕业设计Java音乐视频分享网站(系统+程序+mysql数据库+Lw文档)
    Android Studio配置
    mmdetection - 训练数据加载流程之pipeline
    codeblocks安装、使用、调试教程
    Java 轻松删除PDF指定页、空白页 (免费工具分享)
    【【萌新的SOC学习之AXI DMA环路测试介绍】】
    在 Elasticsearch 中丰富你的 Elasticsearch 文档
    计网期末复习指南(六):应用层(DNS、FTP、URL、HTTP、SMTP、POP3)
    WPF中非递归(无后台代码)动态实现TreeView
    《统计学习方法》第二十章 马尔可夫链蒙特卡罗法
  • 原文地址:https://blog.csdn.net/y1701/article/details/127035846