异步主从复制

主从复制的概念

主从复制是一种在数据库系统中常用的数据备份和读取扩展技术,通过将一个数据库服务器(主服务器)上的数据变更自动同步到一个或多个数据库服务器(从服务器)上,以此来实现数据的冗余备份、读写分离以及负载均衡等目的。

主从复制的原理

  1. 首先在Master上开启二进制日志。
  2. 当Master上数据发生变化,进行DML操作时,会产生二进制日志。
  3. Master上dump线程会通知Slave上的I/O线程来拿二进制日志。
  4. I/O线程拿到日志后会写入到Slave上的中继日志。
  5. 然后SQL线程会去读取新产生的中继日志,重演二进制日志里的操作,从而达到Slave和Master上的数据一模一样,实现数据的一致性

主从复制的原理如上,在Slave服务器上还存在master-info文件和relay-log.info文件。master-info文件记录I/O线程从Master服务器上获取二进制日志结束的pos位置号和日志文件的名字。relay-log.info文件记录当前中继日志的文件名和位置点。

主从复制的操作

1、环境准备

准备两台服务器,一台作为master服务器(192.168.2.117),一台作为slave服务器(192.168.2.118),确保两台服务器上的mysql服务是启动的,mysql版本为5.x。

修改主机名,便于辨识:

// master服务器上
[root@localhost ~] hostnamectl set-hostname master

// slave服务器上
[root@localhost ~] hostnamectl set-hostname slave

2、修改mysql配置文件

在master服务器上开启二进制日志,server_id=1,在slave服务器上也可以开启二进制日志,server_id=2

// master服务器上
[root@master ~] vim /etc/my.cnf
# 找到[mysqld]位置添加以下内容
[mysqld]
log_bin
server_id=1

// 重启服务
[root@master ~] service mysqld restart

// slave服务器上
[root@slave ~] vim /etc/my.cnf
# 找到[mysqld]位置添加以下内容
[mysqld]
log_bin
server_id=2

// 重启服务
[root@slave ~] service mysqld restart

3、统一两台服务器的基础数据

// master服务器导出所有数据
[root@master ~] mysqldump -uroot -p'123456' --all-databases >all_db.SQL

// 上传slave服务器
[root@master ~] scp all_db.SQL root@192.168.2.118:/root

// slave服务器执行SQL文件
[root@slave ~] mysql -uroot -p'123456' <all_db.SQL

4、master服务器初始化二进制日志

清除master服务器上所有的二进制日志,因为上一步已经做了一次全部备份了。

root@(none) mysql> reset master;

// 查看二进制文件名和位置点POS
root@(none) mysql> show master status;

5、新建授权用户

在master服务器上新建一个授权用户,给slave来复制二进制日志。

// master服务器上操作
root@(none) mysql> reset master;
root@(none) mysql> grant replication slave on *.* to 'slave-1'@'192.168.2.118';

6、配置master-info信息

在slave服务器上配置master-info信息,master-info文件记录I/O线程从master服务器上获取二进制日志结束的pos位置号和日志文件的名字。当master服务器通知slave服务器来读取二进制日志时,slave服务器通过master-info信息才能得知从哪里开始读取。

// slave服务器上操作
root@(none) mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.137',
> MASTER_USER='slave-1',
> MASTER_PASSWORD='123456',
> MASTER_PORT=3306,
> MASTER_LOG_FILE='master-bin.000001',
> MASTER_LOG_POS=154;

7、查看slave是否配置成功

// slave服务器上操作
// 启动slave
root@(none) mysql> start slave;

root@(none) mysql> show slave status\G;

// 下面这两个为yes则表示启动成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

在线主从复制

在线主从复制指服务器运行中进行主从复制,在线主从复制与上述主从复制原理一致,其难点在于slave服务器配置master-info信息时,如何准确知晓master服务器的二进制日志文件名和位置号pos。

本文在这给出的方法是使用xtrabackup工具包,xtrabackup在备份的时候自动记录二进制日志文件和位置好,感兴趣的小伙伴可以自行去搜索深入了解。

主从切换的原理

在主从复制中,当主服务器挂了,就需要提升原来的从为主,这就是主从切换。

首先在监控机器上每秒钟扫描master服务器的3306端口(nc 3306),当master服务器出现故障时,马上执行手工操作的步骤(最后是将其编写成脚本自动执行),从而实现主从复制。

手工操作步骤:

  1. 首先选择一台从服务器,在其上停止从服务器服务(stop slave)。
  2. 开启二进制日志。
  3. 重置二进制日志(reset master)。
  4. 建立授权复制用户。
  5. 在其他从服务器中配置master-info信息去拉取二进制日志。
  6. 将网站的写流量切换到新的master上。

常见问题

  1. 查看服务器防火墙3306端口是否开放。
  2. 配置时是否出现拼写错误。
  3. 两天服务器是否为克隆产生,是克隆产生则需要修改uuid。修改mysql数据目录下auto.cnf文件(vim /data/mysql/auto.cnf)中server-uuid的值,随便修改几个字符即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/777804.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年6月后2周重要的大语言模型论文总结:LLM进展、微调、推理和对齐

本文总结了2024年6月后两周发表的一些最重要的大语言模型论文。这些论文涵盖了塑造下一代语言模型的各种主题&#xff0c;从模型优化和缩放到推理、基准测试和增强性能。 LLM进展与基准 1、 BigCodeBench: Benchmarking Code Generation with Diverse Function Calls and Com…

图文识别0难度上手~基于飞浆对pdf简易ocr并转txt

前言 本篇pdf适用windows对视觉识别0基础的的纯小白用户。大佬请绕道~~ 注意&#xff1a; 本项目pdf的ocr对于表格、画图文字&#xff0c;水印等干扰没做任何处理&#xff0c;因此希望各位使用该功能的pdf尽量不要含有这些干扰项&#xff0c;以免影响翻译效果。 流程 1.构建…

收银系统源码-收银台副屏广告

1. 功能描述 门店广告&#xff1a;双屏收银机&#xff0c;副屏广告&#xff0c;主屏和副屏同步&#xff0c;总部可统一控制广告位&#xff0c;也可以给门店开放权限&#xff0c;门店独立上传广告位&#xff1b; 2.适用场景 新店开业、门店周年庆、节假日门店活动宣传&#x…

Nginx实战:nginx性能压测(ab)

在nginx的生产实践中,不管是服务上线,还是性能优化,都会遇到需要对nginx的性能压测,本文介绍一个简单的压测工具:ab命令 ab(Apache Bench)是一个常用的HTTP压力测试工具,可以用来测试Nginx的性能和压力。ab命令可以指定并发请求数、请求数、请求类型等参数,并输出测试…

SpringBoot 启动流程四

SpringBoot启动流程四 前面这个创建对象是初始化SpringApplication对象 是加载了SpringBoot程序的所有相关配置 我们接下来要将这个run方法 run过程是一个运行 初始化容器 我们看我们的运行结果是得到一个ConfigurableApplicationContext对象 package com.bigdata1421.star…

MySQL 集群

MySQL 集群有多种类型&#xff0c;每种类型都有其特定的用途和优势。以下是一些常见的 MySQL 集群解决方案&#xff1a; 1. MySQL Replication 描述&#xff1a;MySQL 复制是一种异步复制机制&#xff0c;允许将一个 MySQL 数据库的数据复制到一个或多个从服务器。 用途&…

医疗器械企业CRM系统推荐清单(2024版)

近年来&#xff0c;我国医疗器械行业在国家政策支持、医改深入、人口老龄化和消费能力提升等因素推动下&#xff0c;得到了快速发展&#xff0c;正日益成为创新能力增强、市场需求旺盛的朝阳产业。然而&#xff0c;行业也面临价格压力、市场份额重新分配、合规风险以及产品和服…

mac 安装nvm的教程

在macOS上切换Node.js版本&#xff0c;可以使用nvm&#xff08;Node Version Manager&#xff09;。以下是安装nvm和切换Node.js版本的步骤&#xff1a; 安装nvm 下载方式 终端复制输入&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.…

Odoo14使用hiPrint实现打印功能

使用hiPrint代替odoo原生的打印功能 可以实现快速自定义修改打印模板&#xff0c;无需每次都调整打印模板 无论是表单分页还是各种需求&#xff0c;都能满足 目录 1 使用命令创建新的模块&#xff0c;无用的demo文件可以删除掉 2 新建“打印模板”&#xff0c;用于保存打印…

MySQL表的增删改查(CRUD)

MySQL表的增删改查&#xff08;CRUD&#xff09; 文章目录 MySQL表的增删改查&#xff08;CRUD&#xff09;1. Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2. Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式…

嵌入式系统中状态机实现详解

嵌入式开发中系统经常处于某种状态,如何处理呢?接下来分析一下,状态机的实现无非就是 3 个要素:状态、事件、响应。转换成具体的行为就 3 句话。 发生了什么事? 现在系统处在什么状态? 在这样的状态下发生了这样的事,系统要干什么? 用 C 语言实现状态机主要有 3 种方法…

JVM专题之垃圾收集算法

标记清除算法 第一步:标记 (找出内存中需要回收的对象,并且把它们标记出来) 第二步:清除 (清除掉被标记需要回收的对象,释放出对应的内存空间) 缺点: 标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需 要分配较大对象时,无法找到…

spark on k8s两种方式的原理与对比

spark on k8s两种方式的原理与对比 1、spark on k8s 方式 spark-submit可以直接用来向 Kubernetes 集群提交 Spark 应用&#xff0c;提交机制如下&#xff1a; 1、Spark 创建一个在Kubernetes pod中运行的 Spark 驱动程序。 2、驱动程序创建在 Kubernetes Pod 中运行的执行器…

阿里云服务器配置、搭建(针对Spring boot和MySQL项目)

这是一篇极其详细且痛苦的文章&#xff0c;还是在两位后端的大佬手把手教导下、以及我找遍全网所有资料、问了N遍AI、甚至直接申请阿里云工单一对一询问客服一整天、连续清空再上传反复30多次整个项目jar包......总结出来的终极要人命踩坑的问题总结 一、首先购买服务器 其实不…

25.【C语言】循环结构之for 上

1.基本使用 类比while 在while循环中&#xff0c;有三个不可或缺的部分&#xff1a;初始化&#xff0c;判断部分&#xff0c;调整部分 int i 0;//初始化 while (i < 10)//判断部分 {……i;//调整部分 }三个部分太分散&#xff0c;用for循环可集为一体&#xff0c;简洁 …

dotnet ef工具使用

设置工具安装目录 dotnet tool install dotnetsay --tool-path G:\dotnet-tools安装 dotnet tool install --global dotnet-ef更新 dotnet tool update --global dotnet-ef查看版本 dotnet ef --version创建迁移文件 # 只有一个dbcontext dotnet ef migrations add init #…

Android Camera2 集成人脸识别算法

这可能是全网唯一一篇介绍Android Camera2接口集成人脸算法的文章了~ 写在前面&#xff1a; 说起人脸识别&#xff0c;相信大家都不会感到陌生&#xff0c;在我们平时的工作生活中&#xff0c;人脸打卡、刷脸支付等等已经是应用的非常广泛了&#xff0c;人脸识别也给我们的生活…

基于若依的文件上传、下载

基于若依实现文件上传、下载 文章目录 基于若依实现文件上传、下载1、前端实现-文件上传1.1 通用上传分析1.2 修改实现上传接口 2、后端实现-文件上传3、后端实现-文件下载4、前端实现-文件下载 官网其实也写了&#xff0c;但是我是自己改造封装了一下&#xff0c;再次迈向全栈…

kafka系列之消费后不提交offset情况的分析总结

概述 每当我们调用Kafka的poll()方法或者使用KafkaListener(其实底层也是poll()方法)时&#xff0c;它都会返回之前被写入Kafka的记录&#xff0c;即我们组中的消费者还没有读过的记录。 这意味着我们有一种方法可以跟踪该组消费者读取过的记录。 如前所述&#xff0c;Kafka的一…