MySQL 主从复制(实时热备)原理与配置

2023-11-08

MySQL是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失。为了保证MySQL数据库的可靠性,就要会一些提高可靠性的技术。MySQL主从复制可以做到实时热备数据。本文介绍MySQL主从复制原理及其配置过程。

术语:主从复制——master slave replication(M-S模式)。

用途

  • 备份
  • 读写分离
  • 高可用和故障切换(需要做HA)
  • MySQL升级测试

原理

实际上,它的原理思路很简单。MySQL 中有一种日志叫做 bin 日志(二进制日志),这个日志会记录下所有修改了数据库的SQL语句。主从复制的原理其实就是"从"服务器向"主"服务器请求这个日志文件,"主"服务器会把这个 bin 日志复制到"从"服务器上执行一遍,这样"从"服务器上的数据就和"主"服务器上的数据相同了。

流程图:

图解:

  1. 服务器必须启用二进制日志(log-bin),记录任何修改了数据库数据的事件;
  2. 从服务器开启一个线程(I/O Thread)把自己扮演成 MySQL 的客户端,通过 MySQL 协议,请求主服务器的二进制日志文件中的事件;
  3. 主服务器启动一个线程(Dump Thread),检查自己二进制日志中的事件,跟对方请求的位置对比,如果不带请求位置参数,则主服务器就会从第一个日志文件中的第一个事件一个一个发送给从服务器;
  4. 服务器接收到主服务器发送过来的数据把它放置到中继日志(relay log)文件中。并记录该次请求到主服务器的具体哪一个二进制日志文件内部的哪一个位置(主服务器中的二进制文件会有多个,其名结尾以6位数递增);
  5. 从服务器启动另外一个线程(SQL Thread ),把 relay log 中的事件读取出来,并在本地再执行一次。

配置过程

主服务器(Master)

  • 启用二进制日志 log-bin;
  • 设置一个全局唯一的 server_id;
  • 提前准备好一个有复制权限(replication slave,replication client)的用户。

从服务器(Slave)

  • 启动中继日志 relay-log;
  • 设置一个全局唯一的 server_id;
  • 使用主服务器提供的有复制权限的用户连接至 Master;
  • 启动复制线程。

配置演示

测试环境

主服务器:192.168.43.75
从服务器:192.168.43.111
mysql版本:mysql-8.0
系统:主 Windows10,从 Windows7

主服务器配置

1.配置 my.ini 

log-bin=master-log-bin
server-id=1
innodb-file-per-table=ON

2.重启服务,并进入MySQL

查看主服务器状态信息:

注:这里的文件名和位置值会在后面的配置中用到。

 3.给复制用户授权

grant replication slave, replication client on *.* to repl_user@192.168.43.111;

或者对现有的超级用户修改可访问主机IP:
update user set host='%' where user='root';    # '%' 代表所有局域IP

一定要刷新权限:

flush privileges;

主服务器配置完成。

从服务器配置

1.配置 my.ini

log-bin=slave-log-bin
relay-log=relay-log
relay-log-index=relay-log.index
server-id=2 innodb_file_per_table=ON

2.重启并进入MySQL服务(略)

3.用主服务器提供的复制用户连接主服务器

change master to master_host='192.168.43.75',master_port=3306,master_user='repl_user',master_password='123456',master_log_file='master-log-bin.000005',master_log_pos=155;  # 这里的 master 日志文件和位置必须与主服务器当前状态一致!

4.启动复制线程

此时会启动 IO Thread 和 SQL Thread 这两个线程。 

(停止复制线程:stop slave)

查看从服务器状态信息:

MySQL主从配置到此完成。

测试

在主服务器上新建一个数据库test:

在从服务器上查看:

测试通过,完美。

常见问题处理

当我们配置好MySQL主从同步时,原本是可以实现主从同步的,但是重启机器后就发现无法同步了。

MySQL Replication 中 slave 机器上有两个关键的线程,死一个都不行,一个是 Slave_IO_Running,一个是 Slave_SQL_Running。一个负责与主机的 IO 通信,一个负责自己的 slave mysql 语句执行。

1)如果是Slave_SQL_Running:No,如图。

解决办法:

> stop slave;
> set global sql_slave_skip_counter=1;
> start slave;

2)如果是Slave_IO_Running:No,如图。

解决办法:
查看主服务器状态:

查看从服务器状态:

找到问题所在:Master_Log_File没有对应。

> stop slave;
> change master to master_log_file='mysql-bin.000026',master_log_pos=0;
> slave start;
> show slave status\G;

得解。

 

  至此,转载请注明出处。

转载于:https://www.cnblogs.com/wcwnina/p/11336024.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 主从复制(实时热备)原理与配置 的相关文章

随机推荐

  • Matlab笔记

    这里写自定义目录标题 Matlab笔记 统计矩阵中非0元素的个数 Matlab笔记 统计矩阵中非0元素的个数 sum sum A 0
  • WebBrowser控件使用详解

    WebBrowser控件使用详解 方法 说明 GoBack 相当于 IE的 后退 按钮 使你在当前历史列表中后退一项 GoForward 相当于IE的 前进 按钮 使你在当前历史列表中前进一项 GoHome 相当于IE的 主页 按钮 连接用
  • C++学习之lambda表达式

    一 基本概念 C 11 引入了lambda表达式 这个特性的最普遍应用 就是配合泛型算法 泛型算法 采用了迭代器操作 从而使得各种不同的容器能使用一套算法 泛型算法允许我们定制自己的操作 即传递一个可调用对象 lambda其实也是一个可调用
  • 华为OD机试 - 导师请吃火锅(Python)

    题目描述 入职后 导师会请你吃饭 你选择了火锅 火锅里会在不同时间下很多菜 不同食材要煮不同的时间 才能变得刚好合适 你希望吃到最多的刚好合适的菜 但你的手速不够快 用m代表手速 每次下手捞菜后至少要过m秒才能再捞 每次只能捞一个 那么用最
  • 数据挖掘导论课后习题答案-第四章

    最近在读 Introduction to Data Mining 这本书 发现课后答案只有英文版 于是打算结合自己的理解将答案翻译一下 其中难免有错误 欢迎大家指正和讨论 侵删 第四章 a Gini 1 0 5 2 0 5 2 0 5 b
  • prod函数,cumprod函数【Matlab】

    1 prod函数 prod函数用于求矩阵元素的积 其调用格式如下 1 B prod A 若A为向量 则返回所有元素的积 若A为矩阵 则返回各列所有元素的积 2 B prod A dim 返回矩阵A中的第dim维方向的所有元素的积 prod函
  • shell 脚本一键生成busybox从零创建文件系统for x86_64

    bin sh update images for x86 64 git clone https github com torvalds linux git depth 1 verbose cd linux make defconfig cp
  • Real-world Multi-object, Multi-grasp Detection论文Demo复现

    前言 本文主要参考这篇博客 然后根据自己的实际复现中遇到的问题写出 1电脑的环境 ubuntu16 04 tensorflow gpu1 12 0 cuda9 0 cudnn7 2 https github com ivalab 论文资源的
  • wsl下redis环境搭建及部署模型

    安装编译依赖 sudo apt install gcc sudo apt get install pkg config sudo apt get install build essential 遇到错误 jemalloc jemalloc
  • Java多线程-线程中断interrupt

    前言 这里主要探讨中断常用的三个方法 interrupt 在一个线程中调用需要中断现成的interrupt 方法 会对该线程发出信号 将中断状态标志为true isInterrupted 判断当前线程的中断状态 interrupted 将线
  • 从入门到入土:nmap出击:使用nmap扫描某台靶机,给出并解读靶机环境的配置情况

    此博客仅用于记录个人学习进度 学识浅薄 若有错误观点欢迎评论区指出 欢迎各位前来交流 部分材料来源网络 若有侵权 立即删除 本人博客所有文章纯属学习之用 不涉及商业利益 不合适引用 自当删除 若被用于非法行为 与我本人无关 nmap出击 任
  • 使用开源my-deploy工具实现开发环境的代码自动化部署

    编者按 由于公司内部存在的开发系统 内网开发 外网预发布 外网生产环境 程序员频繁的更新代码造成运维人员大量时间被占用 于是有了使用该开源工具的部署测试环节 在这里感谢该开源工具的作者 也希望我这边文档能多少帮助需要类似开发环境的技术人员
  • Linux之NFS服务器

    目录 Linux之NFS服务器 简介 NFS背景介绍 生产应用场景 NFS工作原理 NFS工作流程图 流程 NFS的安装 安装nfs服务 安装rpc服务 启动rpcbind服务同时设置开机自启动 启动nfs服务同时设置开机自启动 NFS的配
  • VMware中快照如何使用

    目录 自说 快照与备份的区别 使用 自说 所谓快照 简单点来讲就如同相机中的一张照片 这张照片只要存在就可以回到拍照之前的状态场景 系统快照就是把系统中的当前状态记录在一个文件中 这个文件通常在你保存虚拟机的工作空间中 当我们在使用系统是误
  • 贝叶斯网的R实现( Bayesian networks in R)bnlearn(3)

    4 参数学习 得到贝叶斯网的网络结构之后 可以对局部分布的参数进行参数估计了 这称作参数学习 4 1参数学习的基本方法 bnlearn包的参数学习函数是bn fit 其参数method给出了两种具体的方法 mle 为极大似然估计 bayes
  • 2023最新版Android studio安装入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。

    目录 JDK安装与配置 一 下载JDK 二 JDK安装 三 JDK的环境配置 四 JDK的配置验证 Android studio安装 Android studio连接手机真机调试 以华为鸿蒙为例 一 新建一个android项目 二 进入项目
  • 如何将自建的matlab神经网络的激活函数使用gensim生成simulink模型

    要把自定义的matlab激活函数生成到simulink模型中 必须在simulink神经网络库的激活函数子库中添加相应的激活函数 如何打开simulink的神经网络库 这里有两种方法 一种是在命令窗口中输出 neural 就会弹出以下窗口
  • 玩转C++小项目之短链接Demo

    玩转C 小项目之短链接Demo 真实的短链接相对来说比较复杂 例如 hash算法 放号系统等等 今天只是从小项目角度模拟一个短链接实现 如何通过短短的几十行代码快速实现一个 其中涉及的几个关键点 如何将长链接缩短 如何存储映射关系 映射关系
  • 【实际开发17】- 静态测试

    静态测试技术 不运行被测试程序 对代码通过检查 阅读进行分析 目录 1 静态测试 1 静态测试三步曲 走查 审查 评审 2 编码的标准和规范 3 代码评审 1 代码走查 Walk Through 2 正式会议审查 Inspection 3
  • MySQL 主从复制(实时热备)原理与配置

    MySQL是现在普遍使用的数据库 但是如果宕机了必然会造成数据丢失 为了保证MySQL数据库的可靠性 就要会一些提高可靠性的技术 MySQL主从复制可以做到实时热备数据 本文介绍MySQL主从复制原理及其配置过程 术语 主从复制 maste