7 - MySQL主从同步|主从同步模式

news2024/11/17 2:42:01

MySQL主从同步|主从同步模式

  • MySQL主从同步
    • 主从同步介绍
    • 主从同步工作过程
    • 主从同步结构模式
    • 配置主从同步
      • 一主一从同步结构
      • 一主多从同步结构
      • 主从从同步结构
      • 主主同步结构
  • 主从同步模式
    • 主从同步结构模式复制模式

MySQL主从同步

主从同步介绍

存储数据的服务结构
主服务器: 接收客户端访问连接
从服务器:自动同步主服务器数据

主从同步工作过程

在这里插入图片描述
在这里插入图片描述
启动binlog日志

  • Slave
    • Slave_IO :复制master主机 binlog日志文件里的SQL命令到本机的relay-log文件里
    • Slave_SQL:执行本机relay-log文件里的SQL语句,实现与Master数据一致

主从同步结构模式

一主一从同步结构 :存储数据的服务结构,能够实现数据的自动同步(也就是数据备份)
一主多从同步结构
主从从同步结构 (给一主一从服务器的从服务器也配置一台从服务器)
主主同步结构 (两台服务器 彼此是对方的主服务器 同时还是对方的从服务器)

配置主从同步

一主一从同步结构

  • 配置主服务器
  1. 启动binlog日志
vim /etc/my.cnf
[mysqld]
server_id=51
log_bin=master51  # 日志默认存储在数据库目录下
--------
systemctl restart mysqld
  1. 授权用户
mysql -uroot -p密码
# replication slave 让用户有复制命令的权限
mysql> grant replication slave on *.* to repluser@"%" identified by "密码"
  1. 查看binlog日志信息
# 
mysql> show master status;

在这里插入图片描述

  • 配置从服务器
  1. 设置server_id 服务器编号 并重启服务
vim /etc/my.cnf
[mysqld]
server_id=52

systemctl restart mysqld
  1. 确保与主服务器数据一致
  2. 指定主库信息
mysql -uroot -p密码
mysql > change master to master_host="192.168.4.51",master_user="repluser",master_password="密码",master_log_file="master51.000001",master_log_pos=441 # 和主一样
  1. 启动slave程序
mysql> start slave;
  1. 查看状态信息(io线程和SQL线程必须同时是yes状态)
mysql> show slave status

在这里插入图片描述

一主多从同步结构

一台主 两台从
在从服务器做如下服务:

  1. 设置server_id 服务器编号 并重启服务
vim /etc/my.cnf
[mysqld]
server_id=53

systemctl restart mysqld
  1. 确保与主服务器数据一致
    第一步 在主服务器 对db1库做完全备份 然后吧备份文件拷贝给53
# --master-data 做完全备份数据时,在备份文件里记录使用的日志名和偏移量
mysqldump -uroot -pxxx --master-data -B db1 > /root/db1.sql
scp /root/db1.sql 192.168.4.53:/opt/

第二步 主机53使用备份文件恢复数据

]# mysql -uroot -pxxx < /opt/db1.sql
]# mysql -uroot -pxxx -e 'show databases'
]# mysql -uroot -pxxx -e 'select count(*) from db1.t1'
  1. 指定主库信息
# 在备份文件里查看日志名和偏移量
grep master51 /opt/db1.sql
#显示如下信息
CHANGE MASTER TO MASTER_LOG_FILE='master51.000001',MASTER_LOG_POS=2000;
mysql -uroot -p密码
mysql > change master to master_host="192.168.4.51",master_user="repluser",master_password="密码",master_log_file="master51.000001",master_log_pos=20000 # 和主一样
  1. 启动slave程序
mysql> start slave;
  1. 查看状态信息(io线程和SQL线程必须同时是yes状态)
mysql> show slave status

测试主从

# 在主服务器上插入新数据
mysql> insert into db1.t1 values(999)
# 2台从服务器可以看到一样的数据
] # mysql -uroot -pxxx -e 'select * from db1.t1'

主从从同步结构

在这里插入图片描述

把数据库服务器 53 54 55 配置为主从从结构
就是给一主一从中的从服务器也配置从服务器
环境准备:把53主机恢复为独立的数据库服务器 54 55 配置主从从同步

[root@hotst53 ~]# cd /var/lib/mysql
[root@hotst53 ~]# rm -rf master.info
[root@hotst53 ~]# rm -rf relay-log.info
[root@hotst53 ~]# ls host53-relay-bin.*
[root@hotst53 ~]# rm -rf *-relay-bin.*
[root@hotst53 ~]# systemctl restart mysqld
mysql > show slave status \G
Empty set
mysql > drop database db1;

具体配置如下
第一步 配置主数据库服务器 53

1.启用binlog日志
vim /etc/my.cnf
[mysqld]
server_id=53
log_bin=master53

systemctl restart mysqld
2.用户授权
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
3.查看日志信息
mysql> show master status;

第二步 配置主机54 因为同时是2中角色,所以2种角色都要有

vim /etc/my.cnf
[mysqld]
server_id=54
log_bin=master54
log_slave_updates # 允许级联复制 54主机把自己主服务器的数据拷贝给自己的从服务器
:wq
systemctl restart mysqld
2.用户授权
mysql> grant replication slave on *.* to repluser@'%' identified by "123qqq..a";
3.指定主机服务器地址 日志名 偏移量
mysql> change master to master_host="192.168.4.53",master_user="repluser",master_password="123..." master_log_file="master53.000001",master_log_pos=441;
mysql> start slave;
mysql> show slave status \G

第三步 配置主机 55 (做54的从服务器)

1指定server_id 并重启mysql服务
vim /etc/my.cnf
[mysqld]
server_id=55
:wq
systemctl restart mysqld
2指定主服务器信息
mysql> change master to master_host="192.168.4.54",master_user="repluser",master_password="xxx",master_log_file="master54.000001",master_log_pos=441
3启动slave进程
4查看状态

验证结果 : 在53创建的数据 54 55都能看到

主主同步结构

两台数据库服务器分别做彼此的从服务器和主服务器 2台服务器2种角色的配置都要有
第一步 配置68 配置69

vim /etc/my.cnf
[mysqld]
server_id=68
log_bin=master68
:wq
systemctl restart mysald
mysql> show master status
69主机mysql> grant replication slave on *.* to repluser@"%" identified by "111";
69主机mysql> change master to master_host="192.168.4.68",master_user="repluser",master_password="xxx",master_log_file="master68.000001",master_log_pos=441;
mysql>

主从同步模式

主从同步结构模式复制模式

主从数据库服务实现数据同步的工作方式
支持的工作方式:

  • 第一种 异步复制模式(默认)
    主服务器执行一次事物后,立即将结果返回给客户端,不关心从服务器是否已经同步数据
  • 第二种 半同步复制模式
    等待至少一个从服务器同步后 才会给客户端

把主服务器和从服务器的工作模式都修改为半同步复制模式
方法一 命令行设置
好处 不用重启服务 马上生效 但是不是永久化

1.安装master模块
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME "semisync_master.so"
2.安装slave模块
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME "semisync_salve.so"
3.查看模块是否安装
mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like "%semi%"
4.启用master模块
mysql> set global rpl_semi_sync_master_enabled=1;
5.启用slave模块
mysql> set global rpl_semi_sync_slave_enabled=1;
6.查看模块是否启用
mysql> show variables like "rpl_semi_sync_%_enabled"

在这里插入图片描述

方法二 永久配置 编辑主配置文件

vim /etc/my.cnf
[mysqld]
# 安装模块
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
# 启用模块
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_enabled=1

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构与算法教程,数据结构C语言版教程!(第三部分、栈(Stack)和队列(Queue)详解)五

第三部分、栈(Stack)和队列(Queue)详解 栈和队列&#xff0c;严格意义上来说&#xff0c;也属于线性表&#xff0c;因为它们也都用于存储逻辑关系为 "一对一" 的数据&#xff0c;但由于它们比较特殊&#xff0c;因此将其单独作为一章&#xff0c;做重点讲解。 使用栈…

vscode+opencv基础用法学习1

案例1&#xff1a;读取图片信息 如果是使用云服务器的话&#xff0c;由于图形界面的问题&#xff0c;使用cv::show来显示图片会报错 // 图片的读取和显示 // 导入opencv头文件 #include "opencv2/opencv.hpp" #include <iostream>int main(int argc, char** …

数据仓库 Apache Hive

一、数据分析 1、数据仓库 数据仓库&#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;&#xff0c;是一个用于存储、分析、报告的数据系统。 数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持&#xff08…

js:使用canvas画一个半圆

背景 需求需要画一个半圆&#xff0c;或者多半圆&#xff0c;其实一下子就能想到 canvas 中的圆弧&#xff0c;核心使用 context.arc context.arc(x,y,r,sAngle,eAngle,counterclockwise)接下来我们看看示例 例一 <!DOCTYPE html> <html lang"en"> &…

机器学习基本算法:算法流程和算法分类

1、算法流程 机器学习的过程是一个完整的项目周期&#xff0c;其中包括数据的采集、数据的特征提取与分类&#xff0c;之后采用何种算法去创建机器学习模型从而获得预测数据。 算法流程 从上图可以看出一个完整的机器学习项目包含以下这些内容&#xff1a; 输入数据&#x…

JAVA毕业设计121—基于Java+Springboot的房屋租赁管理系统(源代码+数据库+9000字文档)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的房屋租赁管理系统(源代码数据库9000字文档)121 一、系统介绍 本项目还有ssm版本&#xff0c;分为用户、房东、管理员三种角色 1、用户&#xff1a; 注册、登…

Ubuntu 卸载重装 Nvidia 显卡驱动

问题描述 我使用 airsim 的时候&#xff0c;发现 UE4 没法使用显卡&#xff0c;导致非常卡顿 输入 nvidia-smi 有显卡型号等信息的输出&#xff0c;但是进程 process 里面没有显示 airsim 和其他软件占用显卡情况 因此&#xff0c;我选择了卸载重装 一.卸载旧版本的驱动 …

Komodor:Kubernetes 监控工具全面指南

为了方便起见&#xff0c;Komodor 提供了一个简单的 Web 界面&#xff0c;以帮助您监控 Kubernetes 集群的状态。它拥有付费和免费增值计划&#xff0c;除了在出现问题时通知用户外&#xff0c;还拥有一系列方便的工具&#xff0c;用于跟踪和管理集群中部署的资源的状态。让我们…

Python集合(set)

目录 集合创建集合访问集合向集合中添加和删除元素集合的 交集&#xff0c;并集&#xff0c;差集运算**交集****并集****差集** 集合方法 集合 集合是无序和无索引的集合。在 Python 中&#xff0c;集合用花括号编写。 创建集合 创建集合&#xff1a; thisset {"a"…

RISC-V Bytes: Caller and Callee Saved Registers

原文链接1&#xff1a;https://danielmangum.com/posts/risc-v-bytes-caller-callee-registers/ 原文链接2&#xff1a;https://zhuanlan.zhihu.com/p/77663680 //主要讲栈帧 原文链接3&#xff1a;https://www.jianshu.com/p/b666213cdd8a //主要讲栈帧 This is part of a new…

Ftrans飞驰云联荣获“CSA 2023安全创新奖”

2023年12月21日&#xff0c;第七届云安全联盟大中华区大会在深圳成功举办。会上&#xff0c;CSA大中华区发布了多个研究成果并进行 CSA 2023年度颁奖仪式&#xff0c;Ftrans飞驰云联以其突出的技术创新能力和广泛的市场应用前景&#xff0c;荣获备受瞩目的“CSA 2023安全创新奖…

redis夯实之路-哨兵(Sentinel)机制详解

Sentinel&#xff08;哨兵&#xff09;保证了redis的高可用性&#xff0c;一个Sentinel或多个Sentinel组成的系统监视多个主从服务器&#xff0c;当主服务器下线时&#xff0c;自动将一个从服务器升级为主服务器。 sentinel的主要功能 集群监控&#xff1a;负责监控redis mas…

imgaug库指南(20):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

【Python】使用Opencv裁剪指定区域,再重构大小和保存示例

在Python中&#xff0c;使用OpenCV库可以很方便地截取图像的某一区域&#xff0c;然后尺寸重构&#xff0c;最后保存为新的图像文件。以下是一个示例代码&#xff0c;演示如何实现这一操作&#xff1a; import cv2# 读取图像 img cv2.imread(img.jpg)# 定义截取的区域&#x…

Istio 实战:WasmPlugin(Proxy-Wasm 插件)开发(实现限流和修改请求和响应的 header)

更多 istio 文章&#xff1a;Istio 专栏目录 WasmPlugin 的典型应用 限流&#xff1a;当前 envoy 提供的限流能力虽然比较强大&#xff0c;但主要提供了一些 api&#xff0c;在使用上对用户不够友好&#xff0c;且全局限流对每个请求都调用一次限流服务&#xff0c;性能损耗较…

SSM-SpringMVC+Spring+Mybatis

创建项目 创建好 项目后, 项目目录分析 数据库设计 我们采用员工表 Employee 与 部门表 Department 部门表 表设计--- 员工表 --表设计 因为有文件上传操作,因此 建立 info表 (其中 员工只能隶属一个部门,因此 两张表之间 有外键关系) java 代码 设计 数据库建立完毕后,需要…

自定义数据实现SA3D

SA3D&#xff1a;Segment Anything in 3D with NeRFs 实现了3D目标分割 原理是利用SAM(segment anything) 模型和Nerf分割渲染3D目标&#xff0c; SAM只能分块&#xff0c;是没有语义标签的&#xff0c;如何做到语义连续&#xff1f; SA3D中用了self-prompt, 根据前一帧的mask…

C#编程-了解线程的优先级

了解线程的优先级 控制线程行为的一个属性是它的优先级。.NET运行时环境基于它们的优先级执行线程。CPU一次仅执行一个线程。因此,处于执行的可运行状态的线程,排队等待轮到被处理器执行。线程是固定优先级调度的。带有优先级的每个线程在处理器的线程队列中有自己的位置。 …

Java面试之虚拟机

1、前言 本篇的面试题基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、什么是虚拟机&#xff1f; Java 虚拟机&#xff0c;是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件( .class )。 Java 被设计成允许应用程…

老胡的周刊(第124期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 QAnything[2] 开源的企业级本地知识库问答解…