当前位置: 首页 > news >正文

如何进行MySQL的主从复制(MySQL5.7)

  1. 背景:在一些Web服务器开发中,系统用户在进行数据访问时,基本都是直接操作数据库MySQL进行访问,而这种情况下,若只有一台MySQL服务器,可能会存在如下问题
            
    1. 数据的读和写的所有压力都会由一台数据库独立承担,压力太大
    2. 数据库服务器磁盘损坏等原因则会导致数据丢失,出现单点故障问题
  2. 那为了解决这两个问题,我们可以准备两台MySQL服务器,一台主(master)服务器,一台从(slave)服务器,若主库的数据存在变更时,需要同步到从库中,称为主从复制。而用户在访问我们的Web项目时,如果是写操作(insert、update、delete)则直接操作主库即可;如果是读(select)操作,则直接操作从库,同时在这种读写分离的结构中,从库我们是可以有多个的这种结构,这种方式我们可称为读写分离。     
  3. 因为MySQL数据库默认是支持主从复制的,所以我们并不需要借助于其他的技术,只要在数据库中进行简单的配置即可实现。那么接下来我们开始进行MySQL的主从复制的操作
  4. 主从复制的简单介绍
    1. MySQL主从复制是一个异步的复制过程,底层是基于MySQL的数据库自带的二进制日志功能。就是从一台或多台MySQL数据库(slave,从库)从另一台MySQL数据库(master,主库)进行日志的复制,然后再解析对应的日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具进行操作
  5. 本案例中仅通过一主一从来介绍主从复制的操作
    1. 首先我们先准备两台Linux服务器,并且在服务器上需要预先安装好MySQL数据库,同时我们已经将服务器的防火墙已经关闭,并将两台Linux系统的MySQL服务正常启动
      1. Linux操作系统:ubuntu-20.04-live-server-amd64
      2. MySQL数据库版本:5.7.40
    2. 首先进行主库配置
      1. 修改MySQL数据库的配置文件my.cnf文件,在文件最下面添加启用二进制日志功能
        1. # binlog日志
          server-id=101
          log-bin = /home/dev/dev-install/mysql-5.7.40/binlog/mysql-bin
          
        2. log-bin:[必须]启用二进制日志
          server-id:[必须]服务器唯一ID(唯一即可)
      2. 修改完配置文件需要重启MySQL服务
        1. ./mysql.server restart
    3. 主库中创建数据同步的用户并授权
      1. 登录MySQL,然后执行如下指令,创建用户并授权
        1. GRANT REPLICATION SLAVE ON *.* to 'syncdata'@'%' identified by 'Sync@Data123';
        2. 上面的指令是syncdata为用户,Sync@Data123为密码,从库在建立复制的时候需要用到用户授权,只有在有授权用户的前提下才能进行复制
    4. 登录MySQL的数据库,查看master主库的同步状态
      1. 执行如下指令,并将结果中的File和Position的信息记录下来
        1. show master status;
        2. 注意,查看上面的状态之后,不要再操作当前数据库了,也就是不要再执行任何指令,防止数据同步位置错误
    5. 开始进行从库的配置
      1. 修改MySQL数据库的配置文件my.cnf文件,在文件最下面添加设置服务器的唯一id
        1. server-id=102
        2. server-id:[必须]服务器唯一ID
      2. 重启MySQL服务
        1. ./mysql.server restart
    6. 登录从库的MySQL数据库,设置主库的地址以及对应的同步位置,依次执行下列指令
      1. change master to master_host='192.168.xxx.xxx',master_user='syncdata',master_password='Sync@Data123',master_log_file='mysql-bin.000009',master_log_pos=433;start slave;
      2. 上面的指令信息说明为:
        1. master_host :主库的IP地址,即需要根据实际情况的ip设定
        2. master_user :访问主库进行主从复制的用户名,也就是上面所在主库创建的
        3. master_password :访问主库进行主从复制的用户名对应的密码
        4. master_log_file : 从哪个日志文件开始同步,也就是上面查询master状态中展示的File
        5. master_log_pos : 从指定日志文件的哪个位置开始同步,也就是查询master状态中展示的Position
    7. 然后查看从库数据库的状态
      1. show slave status \G
      2. 可以通过状态信息中的 Slave_IO_Running 和Slave_SQL_Running 可以看出主从同步是否就绪,如果这两个参数全为Yes,则表示主从同步已经配置完成
    8. 若状态是Slave_IO_Running: No,Slave_SQL_Running: Yes,说明同步不成功,则需要前往MySQL的log错误日志查看报错信息
      1. 若出现文件[ERROR] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593的解决方案
        1. 找到从数据库的该文件对应的 UUID,该文件为/home/dev/dev-install/mysql-5.7.40/data/auto.cnf,然后编辑auto.cnf,将里面uuid的值随便改一个即可,然后保存文件

        2. 保存完文件重新启动MySQL服务器即可
        3. 再次通过 show slave status \G 查看从数据库的状态
    9. 主从环境的测试
      1. 我们已经把主从复制的环境搭建好了,接下来我们可以通过Navicat连接上两台MySQL服务器进行测试,我们只需要在主库master上执行操作,然后再查看从库slave中是否将数据同步过去即可
        1. 主库创建数据库,刷新并查看从库是否可以正常同步过去
        2. 可以发现主库创建的数据库已经同步到从库,证明主从复制已经验证成功

相关文章:

如何进行MySQL的主从复制(MySQL5.7)

背景:在一些Web服务器开发中,系统用户在进行数据访问时,基本都是直接操作数据库MySQL进行访问,而这种情况下,若只有一台MySQL服务器,可能会存在如下问题 数据的读和写的所有压力都会由一台数据库独…...

5:kotlin 类(Classes )

kotlin支持面向对象编程,也有雷和对象的概念 要声明一个类需要使用class关键字 class Customer属性(Properties) 可以在类名后边添加(),在()里边声明属性 class Contact(val id: Int, var email: String)声明了不…...

达梦:【1】达梦常用操作

达梦:【1】达梦常用操作 一、登录达梦二、创建表空间及用户模式三、查看表空间、用户、模式四、系统查询五、角色管理六、数据库导入导出七、达梦数据库汉字存储八、根据表生成ctl控制文件九、本地连多台数据库(RAC) 一、登录达梦 ./disql username/passwordip:por…...

数字人透明屏幕的技术原理是什么?

数字人透明屏幕的技术原理主要包括人脸识别和全息影像技术。其中,人脸识别技术是通过摄像头捕捉游客的面部表情和动作,并将其转化为数据指令,以便与数字人物进行互动。而全息影像技术则是利用透明屏幕,通过全息投影的方式将数字人…...

提升APP软件的用户体验方法

提升APP软件的用户体验是确保用户满意度和应用成功的关键。以下是一些方法,可以帮助提升APP的用户体验,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.简洁的用户界面设计: …...

JVM运行时数据区域、对象内存分配、内存溢出异常总结

深入理解java虚拟机第二章 二、运行时数据区域2.2.1 程序计数器2.2.2 Java虚拟机栈2.2.3 本地方法栈2.2.4 Java堆2.2.5 方法区2.2.6 运行时常量池2.2.7 直接内存 三、HotSpot虚拟机对象解密2.3.1 对象的创建对象如何分配内存?对象的创建如何处理并发问题&#xff1f…...

【C++设计模式】单例模式singleton

C 设计模式–单例模式singleton 单例模式 单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。 优点:内存中只有一个实例,减少内存开销;避免对资源多重占用;设置全局访问点,严…...

CVPR 2023 精选论文学习笔记:Post-Training Quantization on Diffusion Models

基于MECE原则,我们给出以下四种分类依据: 1. 模型类型 生成模型用于生成与其训练数据相似的新数据。它们通常用于图像生成、文本生成和音乐生成等任务。语言模型用于理解和生成人类语言。它们通常用于机器翻译、聊天机器人和文本摘要等任务。其他模型用于各种任务,例如图像…...

Python基础语法之学习字符串快速格式化

Python基础语法之学习字符串快速格式化 一、代码二、效果 一、代码 # 通过f"{占位}"控制字符串快速格式化,不做精度控制 name "张三" age 13 money 12.5 text f"姓名是{name},年龄是{age},钱是{money}" print(text)二、效果 每一天都是一个…...

Ubuntu22.04 server版本关闭DHCP,手动设置ip

在Ubuntu 22.04 中,网络配置已迁移到 Netplan,因此可以使用 Netplan 配置文件来手动设置 IP 地址并关闭 DHCP。 以下是在 Ubuntu 22.04 上手动设置 IP 地址并禁用 DHCP 的步骤: 打开终端,使用 root 权限或 sudo 执行以下命令&…...

贪心算法(新坑)

贪心入门 概述: 贪心算法是一种在每一步选择中都采取当前最优解的策略,希望最终能够得到全局最优解的算法。简单来说,它会不断地做出局部最优的选择,相信通过这种选择最终能够达到全局最优。 举个例子来说明。假设你要从一个迷…...

C 语言头文件

C 语言头文件 头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。 在程序中要使用头文件,需要使用 C 预处理指令 #include 来引用它…...

MySQL中自增id用完怎么办?

MySQL中自增id用完怎么办? MySQL里有很多自增的id,每个自增id都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如&#…...

C语言常见算法

算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使…...

0-1背包的初始化问题

题目链接 这道题的状态转移方程比较易于确定。dp[i][j]表示能放前i个物品的情况下,容量为j时能放物品的数量(这道题歌曲数量对应物品数量,容量对应时间)。 技巧(收获) 二维dp数组可以视情况优化为一维dp数组…...

API之 要求接口上传pdf 以 合同PDF的二进制数据,multpart方式上传

实现 //时间戳13位毫秒private function getMillisecond() {list($s1,$s2) explode( ,microtime());return (float)sprintf(%.0f,(floatval($s1) floatval($s2)) * 1000);}// 组装参数private function gysscPost1($url,$data){// $data[timestamp] 1694402111964;$data[tim…...

C语言-求阶乘序列前N项和

本题要求编写程序,计算序列 1!2!3!⋯ 的前N项之和。 输入格式: 输入在一行中给出一个不超过12的正整数N。 输出格式: 在一行中输出整数结果。 输入样例: 5输出样例: 153 #include "stdio.h" int main(){int n;int sum 0;scanf("%d",&a…...

3:kotlin 逻辑控制(Control flow)

像其他语言一样,kotlin也有循环和逻辑控制 条件判断(Conditional expressions) kotlin使用if和when来进行条件判断 如果纠结选择if还是when,建议使用when,因为它更能提高程序的健壮性 if 普通写法 fun main() {val…...

Linux系统之一次性计划任务at命令的基本使用

Linux系统之一次性计划任务at命令的基本使用 一、at命令介绍二、at命令的使用帮助2.1 at命令的help帮助信息2.2 at命令的语法解释 三、at命令的日常使用3.1 立即执行一次性任务3.2 指定时间执行一次性任务3.3 查询计划任务3.4 其他指定时间用法3.5 删除已经设置的计划任务3.6 显…...

记录:Unity脚本的编写8.0

目录 需求分析设计GUI包含账号和密码输入栏,包括登录和注册按键添加背景音乐编写脚本控制音乐 退出按钮编写脚本 背景图片完整代码 一个小demo,登录和注册的实现(包括GUI和数据库操控) 需求分析 自行设计GUI,要求 1.包…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...