如何进行MySQL的主从复制(MySQL5.7)
- 背景:在一些Web服务器开发中,系统用户在进行数据访问时,基本都是直接操作数据库MySQL进行访问,而这种情况下,若只有一台MySQL服务器,可能会存在如下问题
- 数据的读和写的所有压力都会由一台数据库独立承担,压力太大
- 数据库服务器磁盘损坏等原因则会导致数据丢失,出现单点故障问题
- 那为了解决这两个问题,我们可以准备两台MySQL服务器,一台主(master)服务器,一台从(slave)服务器,若主库的数据存在变更时,需要同步到从库中,称为主从复制。而用户在访问我们的Web项目时,如果是写操作(insert、update、delete)则直接操作主库即可;如果是读(select)操作,则直接操作从库,同时在这种读写分离的结构中,从库我们是可以有多个的这种结构,这种方式我们可称为读写分离。

- 因为MySQL数据库默认是支持主从复制的,所以我们并不需要借助于其他的技术,只要在数据库中进行简单的配置即可实现。那么接下来我们开始进行MySQL的主从复制的操作
- 主从复制的简单介绍
- MySQL主从复制是一个异步的复制过程,底层是基于MySQL的数据库自带的二进制日志功能。就是从一台或多台MySQL数据库(slave,从库)从另一台MySQL数据库(master,主库)进行日志的复制,然后再解析对应的日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具进行操作
- 本案例中仅通过一主一从来介绍主从复制的操作
- 首先我们先准备两台Linux服务器,并且在服务器上需要预先安装好MySQL数据库,同时我们已经将服务器的防火墙已经关闭,并将两台Linux系统的MySQL服务正常启动
- Linux操作系统:ubuntu-20.04-live-server-amd64
- MySQL数据库版本:5.7.40


- 首先进行主库配置
- 修改MySQL数据库的配置文件my.cnf文件,在文件最下面添加启用二进制日志功能

-
# binlog日志 server-id=101 log-bin = /home/dev/dev-install/mysql-5.7.40/binlog/mysql-bin - log-bin:[必须]启用二进制日志
server-id:[必须]服务器唯一ID(唯一即可)
- 修改完配置文件需要重启MySQL服务
-
./mysql.server restart 
-
- 修改MySQL数据库的配置文件my.cnf文件,在文件最下面添加启用二进制日志功能
- 主库中创建数据同步的用户并授权
- 登录MySQL,然后执行如下指令,创建用户并授权
-
GRANT REPLICATION SLAVE ON *.* to 'syncdata'@'%' identified by 'Sync@Data123'; - 上面的指令是syncdata为用户,Sync@Data123为密码,从库在建立复制的时候需要用到用户授权,只有在有授权用户的前提下才能进行复制

-
- 登录MySQL,然后执行如下指令,创建用户并授权
- 登录MySQL的数据库,查看master主库的同步状态
- 执行如下指令,并将结果中的File和Position的信息记录下来
-
show master status; - 注意,查看上面的状态之后,不要再操作当前数据库了,也就是不要再执行任何指令,防止数据同步位置错误

-
- 执行如下指令,并将结果中的File和Position的信息记录下来
- 开始进行从库的配置
- 修改MySQL数据库的配置文件my.cnf文件,在文件最下面添加设置服务器的唯一id

-
server-id=102 - server-id:[必须]服务器唯一ID
- 重启MySQL服务
-
./mysql.server restart
-
- 修改MySQL数据库的配置文件my.cnf文件,在文件最下面添加设置服务器的唯一id
- 登录从库的MySQL数据库,设置主库的地址以及对应的同步位置,依次执行下列指令
-
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; - 上面的指令信息说明为:
- master_host :主库的IP地址,即需要根据实际情况的ip设定
- master_user :访问主库进行主从复制的用户名,也就是上面所在主库创建的
- master_password :访问主库进行主从复制的用户名对应的密码
- master_log_file : 从哪个日志文件开始同步,也就是上面查询master状态中展示的File
- master_log_pos : 从指定日志文件的哪个位置开始同步,也就是查询master状态中展示的Position

-
- 然后查看从库数据库的状态
-
show slave status \G - 可以通过状态信息中的 Slave_IO_Running 和Slave_SQL_Running 可以看出主从同步是否就绪,如果这两个参数全为Yes,则表示主从同步已经配置完成

-
- 若状态是Slave_IO_Running: No,Slave_SQL_Running: Yes,说明同步不成功,则需要前往MySQL的log错误日志查看报错信息
- 若出现文件[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的解决方案
-
找到从数据库的该文件对应的 UUID,该文件为/home/dev/dev-install/mysql-5.7.40/data/auto.cnf,然后编辑auto.cnf,将里面uuid的值随便改一个即可,然后保存文件
-

- 保存完文件重新启动MySQL服务器即可
- 再次通过 show slave status \G 查看从数据库的状态

-
- 若出现文件[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的解决方案
- 主从环境的测试
- 我们已经把主从复制的环境搭建好了,接下来我们可以通过Navicat连接上两台MySQL服务器进行测试,我们只需要在主库master上执行操作,然后再查看从库slave中是否将数据同步过去即可
- 主库创建数据库,刷新并查看从库是否可以正常同步过去

- 可以发现主库创建的数据库已经同步到从库,证明主从复制已经验证成功
- 我们已经把主从复制的环境搭建好了,接下来我们可以通过Navicat连接上两台MySQL服务器进行测试,我们只需要在主库master上执行操作,然后再查看从库slave中是否将数据同步过去即可
- 首先我们先准备两台Linux服务器,并且在服务器上需要预先安装好MySQL数据库,同时我们已经将服务器的防火墙已经关闭,并将两台Linux系统的MySQL服务正常启动
相关文章:
如何进行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 对象的创建对象如何分配内存?对象的创建如何处理并发问题?…...
【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.包…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
