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

MySQL--主从复制

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

一、什么是主从复制

1、定义

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。

2、作用

  • 数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失
  • 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能
  • 读写分离,使数据库能支撑更大的并发
    • 在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)
    • 在从服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)

二、主从复制原理

实现整个主从复制,需要由slave服务器上的IO进程和Sql进程共同完成

要实现主从复制,首先必须打开Master端的binary log(bin-log)功能,因为MySQL主从复制过程实际上就是Slave从Master端获取相应的二进制日志,然后再在自己slave端完全按照顺序执行日志中所记录的各种操作

 master 负责写 -----A slave relay-log -----B I/O 负责通信读取binlog日志 SQL 负责写数据 

其主从复制流程图与步骤如下:

  • 步骤一:主库db的更新事件(update、insert、delete)被写到binlog
  • 步骤二:从库发起连接,连接到主库
  • 步骤三:此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库
  • 步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log.
  • 步骤五:从库还会创建一个SQL线程,从relay log里面读取内容,将更新内容写入到slave的db.

面试题:1、主从复制延迟大比较慢原因

 主服务器配置高,从服务器的配置低并发量大导致主服务器读的慢。从服务器写的慢网络延迟比较高从服务器的读写速度慢从节点过多

面试题:2、从数据库的读的延迟问题了解吗?如何解决?

 解决方法:半同步复制—解决数据丢失的问题并行复制—-解决从库复制延迟的问题

一、主-从-从架构

10.0.0.2主库---10.0.0.3从库--10.0.0.4从库

1、关闭防火墙

 systemctl stop firewalldsystemctl disable firewalld

2、设置serve_id (主从库)

 # 主库2[root@localhost ~]# vim /etc/my.cnfserve_id=2log_bin=2​# 从库3[root@localhost ~]# vim /etc/my.cnfserve_id=3​# 从库4[root@localhost ~]# vim /etc/my.cnfserve_id=4​[root@localhost ~]# systemctl restart mysqld

3、开启binlog日志,查看binlog日志信息-(主库)

 [root@localhost ~]# mysql -u root -pmysql> show master status;   # 查看binlog日志+----------+----------+--------------+------------------+-------------------+| File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+----------+----------+--------------+------------------+-------------------+| 2.000001 |      154 |              |                  |                   |+----------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)

4、授权 (主库)

 # 允许用户名为"user1",来自10.0.0.*网段的用户使用密码"123"登录到MySQL服务器,并拥有读取二进制日志的权限mysql> grant replication slave on *.* to "user1"@"10.0.0.%" identified by "123";mysql> flush privileges;        # 刷新权限

5、指定主库信息 (从库)

 mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="2.000001" ,master_log_pos=154;

6、启动slave

 mysql> start slave;

7、查看从库状态

 mysql> show slave status\G   查看从库状态...Slave_IO_Running: Yes    io线程Slave_SQL_Running: Yes   sql 线程

二、主-主从-从架构

10.0.0.2主库---10.0.0.3主从库--10.0.0.4从库

初始化数据库

 cd /data/mysql/datarm -rf */data/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/mysql --datadir=/data/mysql/datasystemctl restart mysqld    

1、设置serve_id

 # 主库10.0.0.2[root@localhost ~]# vim /etc/my/cnf...serve_id=2log_bin=2​# 主从库10.0.0.3[root@localhost ~]# vim /etc/my/cnf...serve_id=3log_bin=3log_slave_updates​# 从库10.0.0.4[root@localhost ~]# vim /etc/my/cnfserve_id=4​# 都需要重启mysql服务[root@localhost ~]# systemctl restart mysqld

2、授权与指定主库信息

主库10.0.0.2中操作:

 # 查看主库10.0.0.2的binlog日志[root@localhost ~]# mysql -u root -pmysql> show master status;   # 查看binlog日志+----------+----------+--------------+------------------+-------------------+| File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+----------+----------+--------------+------------------+-------------------+| 2.000001 |      154 |              |                  |                   |+----------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)# 主库10.0.0.2进行授权mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123";mysql> flush privileges;

主从库10.0.0.3中操作:

 # 查看主库10.0.0.3的binlog日志[root@localhost ~]# mysql -u root -pmysql> show master status;   # 查看binlog日志+----------+----------+--------------+------------------+-------------------+| File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+----------+----------+--------------+------------------+-------------------+| 3.000001 |      300 |              |                  |                   |+----------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)# 主库10.0.0.3进行授权mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123";mysql> flush privileges;mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="2.000001" ,master_log_pos=154;mysql> start slave;mysql> show slave status\G

从库10.0.0.4中操作:

 mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="3.000001" ,master_log_pos=300;mysql> start slave;mysql> show slave status\G 

三、互为主从架构

主库10.0.0.2和10.0.0.3互为主从架构

1、设置serve_id

 # 主从库10.0.0.2[root@localhost ~]# vim /etc/my/cnf...serve_id=2log_bin=2log_slave_updates​# 主从库10.0.0.3[root@localhost ~]# vim /etc/my/cnf...serve_id=3log_bin=3log_slave_updates​[root@localhost ~]# systemctl restart mysqld 

2、授权与指定主库信息

主从库10.0.0.2:

 # 查看主库10.0.0.2的binlog日志[root@localhost ~]# mysql -u root -pmysql> show master status;   # 查看binlog日志+----------+----------+--------------+------------------+-------------------+| File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+----------+----------+--------------+------------------+-------------------+| 2.000001 |      154 |              |                  |                   |+----------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)# 主库10.0.0.2进行授权mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123";mysql> flush privileges;mysql> change master to master_host="10.0.0.3",master_user="user1",master_password="123",master_log_file="3.000001" ,master_log_pos=300;mysql> start slave;mysql> show slave status\G

主从库10.0.0.3:

 # 查看主库10.0.0.3的binlog日志[root@localhost ~]# mysql -u root -pmysql> show master status;   # 查看binlog日志+----------+----------+--------------+------------------+-------------------+| File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+----------+----------+--------------+------------------+-------------------+| 3.000001 |      300 |              |                  |                   |+----------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)# 主库10.0.0.3进行授权mysql> grant replication slave  on *.* to "user1"@"10.0.0.%" identified by "123";mysql> flush privileges;mysql> change master to master_host="10.0.0.2",master_user="user1",master_password="123",master_log_file="3.000001" ,master_log_pos=154;mysql> start slave;mysql> show slave status\G

四、问题解决

查看uuid,uuid号需要唯一:

 cat /data/mysql/data/auto.cnf

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

相关文章:

MySQL--主从复制

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、什么是主从复制 1、定义 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一…...

Linux RT调度器之负载均衡

RT调度类的调度策略是:保证TopN(N为系统cpu个数)优先级的任务可以优先获得cpu资源。除了在任务选核时通过基于cpu优先级的选核策略保证这一点外,还有其它流程,我们姑且将这部分流程称作RT调度器的负载均衡(…...

pwn学习笔记(8)--初识Pwn沙箱

初识Pwn沙箱 ​ 沙箱机制,英文sandbox,是计算机领域的虚拟技术,常见于安全方向。一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系…...

Day18_2--Vue.js Ajax(使用 Axios)基础入门学习

Vue.js 中的 Ajax 请求(使用 Axios) 什么是 Axios? Axios 是一个基于 Promise 的 HTTP 客户端,可以用于浏览器和 Node.js 环境中。它是现代化的 Ajax 库,用来替代传统的 XMLHttpRequest。 为什么选择 Axios&#xf…...

windows11远程桌面如何打开

随着远程办公的普及,选择合适的远程桌面工具变得尤为重要。在Windows 11上,用户可以利用系统自带的远程桌面功能,或选择更专业的第三方解决方案,如Splashtop。本文将详细介绍如何在Windows 11上启用远程桌面,并对比Win…...

qt代码显示,包含文本颜色设置等

QScintilla 安装示例代码参考链接 安装 最近发现了一个有趣的库,qt的插件库,之前一直以为显示代码时是重写QTextEdit来实现的,结果qt有现成的一个库来显示这些东西,在此记录一下 # 安装 QScintilla pip install QScintilla示例代码…...

抽象代数精解【6】

文章目录 简单密码算法模运算数学定义置换移位代换仿射 参考文献 简单密码算法 模运算数学定义 模m剩余类集 Z m Z_m Zm​ 设∀a,b∈Z(整数),m为正整数 m|b-a ,称a R b R满足反身性、对称性、传递性 1、R为同余关系,…...

如何选择合适的PCB材料?FR4、陶瓷、还是金属基板?

选择合适的PCB材料对于电路板的性能、可靠性和成本至关重要。不同的PCB材料具有不同的特性,适用于不同的应用场景。 01 FR4(玻璃纤维环氧树脂) FR4的特点: 广泛应用:FR4是最常见的PCB基板材料,广泛应用…...

PXE学习及其简单应用

一、PXE 的定义 PXE 是一种基于网络的启动技术,最初由 Intel 开发,旨在提供一种在没有本地存储设备的情况下通过网络启动操作系统的标准。PXE 集成在计算机的 BIOS 或 UEFI 中,允许计算机从网络服务器下载并启动操作系统或其他软件。 二、PX…...

【Python】把list转换成json文件(list中为字典,元素按行写入)

0.前言 数据需要处理成与大模型输入相同类型的数据,从csv文件读出后,想要转换成json文件,看了好多资料都是把整个list写入了json,并不是我想要的格式,这里记录一下最后的按行写入的格式。 1.list转json import json …...

《机器人SLAM导航核心技术与实战》第1季:第8章_激光SLAM系统

视频讲解 【第1季】8.第8章_激光SLAM系统-视频讲解【第1季】8.1.第8章_激光SLAM系统_Gmapping算法-视频讲解【第1季】8.2.第8章_激光SLAM系统_Cartographer算法-视频讲解【第1季】8.3.第8章_激光SLAM系统_LOAM算法-视频讲解 第1季:第8章_激光SLAM系统 先 导 课第…...

【安当产品应用案例100集】005-安当ASP实现Exchange双因素登录认证

Exchange双因素登录通过增加额外的安全验证层,可以有效提高企业邮箱系统的安全性,减少了数据泄露和账号被盗的风险,同时也符合了日益严格的安全合规要求。 其必要性主要体现在以下几个方面: 提高安全性:传统的用户名…...

【Bug】Pytorch RuntimeError: DataLoader worker (pid(s) 15904) exited unexpectedly

【Bug1】RuntimeError: DataLoader worker (pid(s) 15904) exited unexpectedly 知乎:https://zhuanlan.zhihu.com/p/712407893 环境 Windows 11 Python 3.10 torch 2.0.1 numpy 1.25.0问题详情 在使用 PyTorch 的 DataLoader 时出现的错误。详情 RuntimeError:A…...

谈谈冯诺依曼体系

我们都知道冯诺依曼体系这张图最为代表性,而接下来我们就来浅谈一下各部分之间的作用~ 输入设备:键盘,磁盘,网卡,话筒等等 输出设备:磁盘,网卡,声卡,显示屏等等 这些硬件…...

第十二章 元数据管理10分

12.1 引言 如果没有元数据,组织可能根本无法管理其数据。 ISO/IEC11179 元数据注册标准。 元数据管理原则:应归尽归,应收尽收。衡量标准:目录是否完整。(去第十二章 元数据管理)。 主数据管理:主…...

eco_tracker

特征 VGG是第一个提出使用块的想法,通过使用循环和子程序,可以很容易地在任何现代深度学习框架的代码中实现这些重复的架构。 原始VGG网络有5个卷积块,其中前两个块各有一个卷积层,后三个块各包含两个卷积层。 第一个模块有64个…...

electron 鼠标事件

版本:"electron": "^22.3.27",实现一个在windows下图片点击右键,使用electron打开的功能。 一、注册表操作 注册表工具类 const cp require("child_process"); const { app } require(electron/remote) e…...

网络安全第一次作业(ubuntuan安装nginx以及php部署 and sql注入(less01-08)))

ubuntuan安装nginx以及php部署 1.安装依赖包 rootadmin123-virtual-machine:~# apt-get install gcc libpcre3 libpcre3-dev zliblg zliblg-dev openssl libssl-dev2.安装nginx 到https://nginx.org/en/download.html下载nginx 之后将压缩包通过xtfp传输到ubuntu的/usr/loc…...

【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】017 - init_sequence_f 各函数源码分析(一)

【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】017 - init_sequence_f 各函数源码分析(一) 一、setup_mon_len():配置 gd->mon_len 监控长度二、fdtdec_setup() :设备树初始化,配置 gd->fdt_blob 指向uboot镜像末尾的 device tree三、【RK3568未跑】trace_early…...

Mojo AI编程语言(十七)跨平台开发:应用广泛适配

目录 1. Mojo语言简介 2. 跨平台开发的挑战 3. Mojo语言的跨平台特性 3.1 编译器支持 3.2 标准库支持 3.3 抽象层 4. 跨平台开发的最佳实践 4.1 避免平台特定代码 4.2 使用依赖管理工具 4.3 测试覆盖率 5. 高级跨平台开发技巧 5.1 使用容器 5.2 持续交付 5.3 性能…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...