前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL的主从复制

MySQL的主从复制

作者头像
大忽悠爱学习
发布2021-11-15 15:44:29
4650
发布2021-11-15 15:44:29
举报
文章被收录于专栏:c++与qt学习c++与qt学习

MySQL的主从复制


Why we need 主从复制 ?

当单台 MYSQL 服务器无法满足当前网站流量时的优化方案。需要搭建 mysql 集群技术。


复制功能

  • 数据分布
  • 负载均衡(读)
  • 备份
  • 高可用和故障切换
  • MySQL升级测试

复制方式

  • 主–从复制
  • 主–主复制
  • 半同步复制

复制原理

Mysql 中有一种日志叫做 bin 日志(二进制日志)。这个日志会记录下所有修改了数据库的SQL 语句(insert,update,delete,create/alter/drop table, grant 等等)。 主从复制的原理其实就是把主服务器上的 bin 日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。


复制流程图

在这里插入图片描述
在这里插入图片描述

复制过程

  • 主节点必须启用二进制日志,记录任何修改了数据库数据的事件。
  • 从节点开启一个线程(I/O Thread)把自己扮演成 mysql 的客户端,通过 mysql协议,请求主节点的二进制日志文件中的事件
  • 主节点启动一个线程(dump Thread),检查自己二进制日志中的事件,跟对方请求的位置对比,如果不带请求位置参数,则主节点就会从第一个日志文件中的第一个事件一个一个发送给从节点。
  • 从节点接收到主节点发送过来的数据把它放置到中继日志(Relay log)文件中。并记录该次请求到主节点的具体哪一个二进制日志文件内部的哪一个位置(主节点中的二进制文件会有多个,在后面详细讲解)
  • 从节点启动另外一个线程(sql Thread ),把 Relay log 中的事件读取出来,并在本地再执行一次。

复制中线程的作用

从节点

  • I/O Thread: 从 Master 节点请求二进制日志事件,并保存于中继日志中。
  • Sql Thread: 从Relay log 中读取日志事件并在本地完成重放。

主节点

  • Dump Thread:为每个 Slave 的 I/O Thread 启动一个 dump 线程,用于向从节点发送二进制事件。

从节点需要建立二进制日志文件吗?

看情况,如果从节点需要作为其他节点的主节点时,是需要开启二进制日志文件的。这种情况叫做级联复制。如果只是作为从节点,则不需要创建二进制文件。


Mysql复制特点

  • 异步复制:主节点中一个用户请求一个写操作时,主节点不需要把写的数据在本地操作完成同时发送给从服务器并等待从服务器反馈写入完成,再响应用户。主节点只需要把写入操作在本地完成,就响应用户。但是,从节点中的数据有可能会落后主节点,可以使用(很多软件来检查是否落后)
  • 主从数据不一致。

主从复制配置过程

主节点

  • 启用二进制日志。
  • 为当前节点设置一个全局唯一的server_id。
  • 创建有复制权限的用户账号 REPLIACTION SLAVE ,REPLIATION CLIENT。

从节点

  • 启动中继日志。
  • 为当前节点设置一个全局唯一的server_id。
  • 使用有复制权限的用户账号连接至主节点,并启动复制线程。

配置演示

环境:

主机: windows , mysql 5.7 ip:192.168.14.165

从机: Linux, mysql 5.7 , ip: 192.168.14.167

主从都配置在[mysqld]节点下,都是小写


主机修改my.ini配置文件(Windows)

  • 主服务器唯一id :server-id=1
  • 启用二进制日志

log-bin=自己本地的路径/mysqlbin

log-err=自己本地的路径/mysqlerr

在这里插入图片描述
在这里插入图片描述

从机修改my.cnf配置文件(Linux)

  • 配置从服务器id: server-id=2
  • 启动二进制日志 :log-bin=mysql-bin

因为修改过配置文件,主机和从机都需要重启mysql服务


主机和从机都关闭防火墙

  • windows手动关闭
  • 关闭虚拟机linux防火墙,service iptables stop

在windows主机上建立账户,并授权给slave

代码语言:javascript
复制
GRANT REPLICATION SLAVE ON *.* TO 'dhy'@'从机数据库IP' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

查询master状态

代码语言:javascript
复制
SHOW MASTER STATUS;
在这里插入图片描述
在这里插入图片描述

记录File和position的值


在LInux从机上配置需要复制的主机

代码语言:javascript
复制
CHANGE MASTER TO MASTER_HOST ='192.168.14.165',
MASTER_USER ='zhangsan',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysqlbin.具体数字',MASTER_LOG_POS=具体值; #二进制文件的位置,从哪一行开始复制
在这里插入图片描述
在这里插入图片描述

启动从服务器复制功能

代码语言:javascript
复制
start slave 

查看从机状态

在这里插入图片描述
在这里插入图片描述

停止从服务器复制功能

代码语言:javascript
复制
stop slave
在这里插入图片描述
在这里插入图片描述

注意

每一次开启从机复制功能前,先查看当前主机状态,得到最新的position位置,即从哪一行开始进行复制

https://blog.csdn.net/daicooper/article/details/79905660

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL的主从复制
  • Why we need 主从复制 ?
  • 复制功能
  • 复制方式
  • 复制原理
  • 复制流程图
  • 复制过程
  • 复制中线程的作用
    • 从节点
      • 主节点
        • 从节点需要建立二进制日志文件吗?
        • Mysql复制特点
        • 主从复制配置过程
          • 主节点
            • 从节点
            • 配置演示
              • 主机修改my.ini配置文件(Windows)
                • 从机修改my.cnf配置文件(Linux)
                • 因为修改过配置文件,主机和从机都需要重启mysql服务
                • 主机和从机都关闭防火墙
                • 在windows主机上建立账户,并授权给slave
                • 在LInux从机上配置需要复制的主机
                • 停止从服务器复制功能
                • 注意
                相关产品与服务
                云数据库 SQL Server
                腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档