当前位置: 首页 > 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 性能…...

Python面试题:结合Python技术,如何使用Astropy进行天文数据处理

Astropy 是一个用于天文学研究的 Python 库,它提供了处理天文数据的多种工具和函数。以下是一些使用 Astropy 进行天文数据处理的示例: 安装 Astropy 首先,需要确保已安装 Astropy,可以使用以下命令进行安装: pip i…...

Jpa-多表关联-OneToOne

Jpa-多表关联-OneToOne 准备JoinColumnOneToOne属性targetEntitycascade*PERSISTMERGEREMOVEREFRESH orphanRemovalfetchoptionalMappedBy* OneToOne在 hibernate中用于对表与表之间进行维护关联 准备 import com.alibaba.fastjson.JSON; import jakarta.persistence.*; impor…...

zdpy+vue3+onlyoffice文档系统实战上课笔记 20240805

上次 上次计划 1、最近文档表格完善 2、实现登录功能 3、新建文件,复制文件,删除文件 4、其他 目前任务:最近文档表格完善 1、在名称前面,渲染这个文档的图标 2、大小的基本的单位是kb,超过1024kb则换成mb&#xff0…...

【Linux 从基础到进阶】Linux 内核参数调优

Linux 内核参数调优 引言 内核参数调优是提升 Linux 系统性能和稳定性的重要手段。通过合理配置和优化内核参数,可以显著改善系统资源利用率和响应速度。本文将介绍内核参数的调优方法,并提供适用于 CentOS 和 Ubuntu 系统的具体示例。 1. 内核参数简介 内核参数是控制 L…...

【Java数据结构】---泛型

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 ,Java 欢迎大家访问~ 创作不易,大佬们点赞鼓励下吧~ 文章目录 包装类装箱和拆箱泛型泛型…...

Java Lambda表达式总结(快速上手图解)

Java Lambda表达式总结(快速上手详解)-CSDN博客https://blog.csdn.net/m0_66070037/article/details/140912566?spm1001.2014.3001.5501...

【算法模板】图论:Tarjan算法求割边割点

概念 割边(Bridge 或 Cut Edge) 定义: 在一个无向连通图中,如果删除某条边后,图不再连通(即任意两点之间不能相互到达),则称该边为割边。割边也被称为桥,因为它像桥梁…...

如何在IDEA上使用JDBC编程【保姆级教程】

目录 前言 什么是JDBC编程 本质 使用JDBC编程的优势 JDBC流程 如何在IEDA上使用JDBC JDBC编程 1.创建并初始化数据源 2.与数据库服务器建立连接 3.创建PreparedStatement对象编写sql语句 4.执行SQL语句并处理结果集 executeUpdate executeQuery 5.释放资源 前言 在…...

linux web系统安装常见问题解决,租房系统为案例

Warning: require(): open_basedir restriction in effect. 一、执行文件权限 网站目录下 open_basedir增加执行路径 二、文件夹权限放行 三、安装基础环境 composer install 四、数据合并 php think migrate:run 20200402094148 AdminUser: migrating 20200402094148 A…...

Linux驱动开发—平台总线模型详解

文章目录 1.平台总线介绍1.1平台总线模型的组成部分1.2平台总线模型的优势 2.使用平台总线模型开发驱动2.1注册platform设备2.2注册platform驱动2.3效果演示 1.平台总线介绍 Linux 平台总线模型(Platform Bus Model)是一种设备驱动框架,用于…...