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

mysql的主从同步

1、异步复制:这是MySQL默认的复制模式。在这种模式下,主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接收并处理。这种模式的优点是实现简单,但缺点是如果主库崩溃,已经提交的事务可能没有传到从库,导致数据不一致。
2、全同步复制:在这种模式下,主库执行完一个事务后,需要等待所有从库都执行了该事务才能返回给客户端。这种模式的优点是数据一致性高,但缺点是性能影响较大,因为需要等待所有从库的确认。
3、半同步复制:这种模式介于异步复制和全同步复制之间。主库在执行完客户端提交的事务后,会等待至少一个从库接收到并写入relay log中才返回给客户端。这种模式提高了数据的安全性,但会造成一定的延迟。
4、增强半同步复制:这种模式在半同步复制的基础上进一步增强了数据安全性。主库将每个事务写入binlog后,等待从库刷新到磁盘才返回给客户端。这种模式的优点是进一步减少了数据丢失的风险,但缺点是可能会增加事务的延迟。
5、组复制:这种模式是一种高级的复制技术,支持多主多从架构,适用于读写参半的场景。它通过组内节点间的相互通信和投票机制来保证数据的一致性和高可用性。

用两台机器node1(10.10.10.11)和node2(10.10.10.12)两台机器做个基础的主从同步,用node1做主库,用node2做从库,

1、获取myql镜像

# 在node1和node2上分别拉取mysql镜像,该镜像mysql版本是8.4.3,docker pull mysql:8

2、获取默认配置文件

启动容器,把配置文件copy到本地,(node1和node2同步操作)

# 在/opt/下创建一个mysql目录# 临时启动一下mysqldocker run -d \  --name mysql-master \  -p 3306:3306 \  -e MYSQL_ROOT_PASSWORD=123456 \  mysql:8  # 把数据和配置目录copy到本地node1上执行docker cp mysql-master:/etc/my.cnf /opt/mysql/my.cnfnode2上执行docker cp mysql-master:/etc/my.cnf /opt/mysql/my.cnf

3、配置启动主库

1、在node1修改主库配置文件

        在node1上执行vim my.cnf ,编辑以下配置

[mysqld]#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2的32次方-1,默认为1server-id=1#是否只读,1 代表当前服务器只读(不能做增删改操作), 0代表读写read-only=0# 设置日志格式,默认值ROW。row(记录行数据)  statement(记录sql)  mixed(混合模式)binlog_format=STATEMENT# 二进制日志名,默认binloglog-bin=master_binlog# 设置需要复制的数据库,默认复制全部数据库#binlog-do-db=test# 设置不需要复制的数据库# binlog-ignore-db=test

2、在node1上启动主库

docker run -d \  --name mysql-master \  -p 3306:3306 \  -e MYSQL_ROOT_PASSWORD=123456 \  -v /opt/mysql/mysql_data:/var/lib/mysql \  -v /opt/mysql/my.cnf:/etc/my.cnf \  --restart=always \  --privileged=true \  mysql:8

 

3、创建主备账号

# 创建专门用于复制的账户CREATE USER 'backups'@'%' IDENTIFIED BY 'backups';# 授予此帐户复制所需的权限GRANT REPLICATION SLAVE ON *.* TO 'backups'@'%';

获取复制源二进制日志坐标

要配置副本在正确的点开始复制过程,您需要在二进制日志中记下源的当前坐标。要获取源二进制日志坐标,通过使用命令行客户端连接到源来启动源上的会话,并通过执行以下语句刷新所有表并阻止写入语句

# 刷新所有表并阻止写入语句mysql> FLUSH TABLES WITH READ LOCK;# 确定当前二进制日志文件的名称和位置mysql> SHOW BINARY LOG STATUS\G

 

记录一下File和Position,在从库配置同步源的时候需要用到

3、配置启动从库

1、配置从库并启动

在node2上执行vim my.cnf ,编辑以下配置

[mysqld]# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改idserver-id=2# 中继日志名,默认xxxxxxxxxxxx-relay-bin#relay-log=relay-bin#是否只读,1 代表只读, 0 代表读写。对于从库来说,我们只需要从从库中进行查询即可,不需要从从库中进行写入操作>以直接把read-only设置为1就行了。read-only=1#二进制文件的名称#log-bin=binlog# 设置日志格式,默认值ROW。row(记录行数据)  statement(记录sql)  mixed(混合模式)binlog_format=STATEMENT

2、启动从库

docker run -d \        --name mysql-slave \        -p 3306:3306 \        -e MYSQL_ROOT_PASSWORD=123456 \        -v /opt/mysql/mysql_data:/var/lib/mysql \        -v /opt/mysql/my.cnf:/etc/my.cnf \        --restart=always \        --privileged=true \        mysql:8

3、使用复制用户请求服务器公钥

这一步是为了避免同步报错

ERROR:Authentication plugin ‘caching_sha2_password‘ reported error:Authentication

执行命令

mysql -u backups -pbackups -h 10.10.10.11 -P3306 --get-server-public-key

执行完之后需要退出当前mysql终端使用root账号进行下面设置

设置从库的同步源

mysql> CHANGE REPLICATION SOURCE TO    ->     SOURCE_HOST='10.10.10.11',    ->     SOURCE_USER='backups',    ->     SOURCE_PASSWORD='backups',    ->     SOURCE_LOG_FILE='master_binlog.000003',    ->     SOURCE_LOG_POS=697;
 

管理从库的同步复制状态

# 暂停副本上的复制mysql> STOP REPLICA;# 开始副本上的复制mysql> START REPLICA;# 检查单个副本的状态SHOW REPLICA STATUS\GReplica_IO_State:副本的当前状态Replica_IO_Running:读取源二进制日志的 I/O(接收器)线程是否正在运行。通常情况下为Yes,除非您尚未启动复制或已明确停止复制,否则您希望此线程处于运行状态STOP REPLICA。Replica_SQL_Running:执行中继日志中事件的SQL线程是否正在运行。与I/O线程一样,这通常应该是Yes。Last_IO_Error, Last_SQL_Error:处理中继日志时I/O(接收方)和SQL(应用方)线程记录的最后错误。理想情况下,这些应该是空白的,表示没有错误。Seconds_Behind_Source:复制SQL(应用程序)线程处理源二进制日志所落后的秒数。数字过大(或不断增加)可能表示副本无法及时处理来自源的事件。值为0,Seconds_Behind_Source通常可以解释为副本已赶上源;但在某些情况下这并不完全正确。例如,如果源和副本之间的网络连接中断,但复制 I/O(接收器)线程尚未注意到这一点,即设置的时间段 replica_net_timeout尚未过去,则可能会发生这种情况。Seconds_Behind_Source无法准确反映情况。当复制 SQL(应用程序)线程赶上 I/O 时, Seconds_Behind_Source显示 0;但当复制 I/O(接收器)线程仍在排队新事件时,Seconds_Behind_Source可能会显示较大的值,直到复制应用程序线程完成执行新事件。当事件具有旧时间戳时尤其可能出现这种情况;在这种情况下,如果您在相对较短的时间内执行SHOW REPLICA STATUS 多次,您可能会看到此值在 0 和相对较大的值之间反复来回变化。
 

详细执行流程看下图

在从库执行 SHOW REPLICA STATUS\G 之后看下面的Replica_IO_State状态显示:Waiting for source to send event,Replica_IO_Running: Yes,Replica_SQL_Running: Yes,说明复制状态正常

在主库执行 SHOW PROCESSLIST \G;

检查正在运行的进程列表来检查连接的副本的状态。副本连接包含Command字段为:Binlog DumpSHOW PROCESSLIST \G;

主库看到这个进程,说明主库Binlog Dump进程启动

4、测试

1、连接主库和从库

2、在主库创建test库和user表,并插入三条数据

# 创建test库
create database test;
use test;

# 在test库中创建user表

# 创建test库create database test;use test;# 在test库中创建user表create table user(  id int(11) primary key not null auto_increment,  name varchar(50) not null,  sex varchar(1),  age int(11))engine=innodb default charset=utf8mb4;# 插入三条数据insert into user(id,name,sex,age) values(null,'张三', '1',18),(null,'李四','0',19),(null,'王五','1',20);

3、查看node2上的从库是否同步

至此,主从同步已经完成,如果需要一主多从,只需要在多部署几个从库,按照上面从库的部署方式就可以了

相关文章:

mysql的主从同步

1、异步复制:这是MySQL默认的复制模式。在这种模式下,主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接收并处理。这种模式的优点是实现简单,但缺点是如果主库崩溃,已经提交的事务可能…...

工程化与框架系列(10)--微前端架构

微前端架构 🏗️ 微前端是一种将前端应用分解成更小、更易管理的独立部分的架构模式。本文将详细介绍微前端的核心概念、实现方案和最佳实践。 微前端概述 🌟 💡 小知识:微前端的核心理念是将前端应用分解成一系列独立部署、松耦…...

【3天快速入门WPF】11-附加属性

目录 1. 步骤1:定义附加属性2. 示例代码3. 步骤2:在XAML中使用附加属性3.1. 示例代码4. 步骤3:扩展使用场景4.1. 示例代码5. 总结上一篇讲到了依赖属性,本篇主要想说一下附加属性。 在WPF中,附加属性(Attached Property)是一种特殊的依赖属性,允许你在不属于某个类的控…...

MySQL并发知识(面试高频)

mysql并发事务解决 不同隔离级别下,mysql解决并发事务的方式不同。主要由锁机制和MVCC(多版本并发控制)机制来解决并发事务问题。 1. mysql中的锁有哪些? 表级锁: 场景:表级锁适用于需要对整个表进行操作的情况,例如…...

现存脑容知识库

Redis import queue import threading import asyncio 异步:在一个线程内,等待的时候可以切换到其他任务。 多线程:每个线程独立运行,同时处理多个任务。 回调函数 网络请求(JavaScript)在浏览器中&a…...

Mysql-如何理解事务?

一、事务是什么东西 有些场景中,某个操作需要多个sql配合完成: 例如: 李四这个月剩下的前不够交房租了,找张三借1000元急用: (1)给张三的账户余额 减去1000元 updata 账户表 set money money -…...

dify绑定飞书多维表格

dify 绑定飞书和绑定 notion 有差不多的过程,都需要套一层应用的壳子,而没有直接可以访问飞书文档的 API。本文记录如何在dify工具中使用新增多条记录工具。 创建飞书应用 在飞书开放平台创建一个应用,个人用户创建企业自建应用。 自定义应…...

QT播放视频保持视频宽高比消除黑边

QT播放视频保持视频宽高比消除黑边 1、问题 在播放视频的时候,由于框架的大小发生变化,导致视频出现黑边很不好看。 因此需要像一种方法消除黑边 2、处理 1、读取视频的宽高比 2、设置视频的Widget的大小固定,Widget的宽高比和视频宽高比…...

1. IO的基础知识

1.1 流 Java程序通过流执行IO。流是一种抽象,它要么生成信息,要么使用信息。流通过java的IO系统链接到物理设备。所有流的行为方式都是相同的,尽管它们链接的物理设备是不同的。 1.2 字节流和字符流 Java定义了两种类型的流 : 字节流和字符流…...

科普:ROC AUC与PR AUC

在评价二分类模型性能时,有许多评价指标,其中,有一对是用面积AUC(Area Under the Curve)做评价的:ROC AUC与PR AUC 本文我们对ROC AUC与PR AUC进行多维度对比分析: 一、定义与核心原理 维度RO…...

Vue3父组件访问子组件方法与属性完全指南

在Vue3的组件化开发中&#xff0c;父子组件间的通信是核心功能之一。本文将详细介绍五种父组件访问子组件属性/方法的实现方案&#xff0c;包含最新的<script setup>语法糖实践。&#xff08;综合1579&#xff09; 一、ref defineExpose&#xff08;推荐方案&#xff0…...

AI时代保护自己的隐私

人工智能最重要的就是数据&#xff0c;让我们面对现实&#xff0c;大多数人都不知道他们每天要向人工智能提供多少数据。你输入的每条聊天记录&#xff0c;你发出的每条语音命令&#xff0c;人工智能生成的每张图片、电子邮件和文本。我建设了一个网站(haptool.com)&#xff0c…...

Android APK组成编译打包流程详解

Android APK&#xff08;Android Package&#xff09;是 Android 应用的安装包文件&#xff0c;其组成和打包流程涉及多个步骤和文件结构。以下是详细的说明&#xff1a; 一、APK 的组成 APK 是一个 ZIP 格式的压缩包&#xff0c;包含应用运行所需的所有文件。解压后主要包含以…...

TCP长连接与短连接

TCP长连接与短连接 TCP&#xff08;传输控制协议&#xff09;中的长连接和短连接是两种不同的连接管理方式&#xff0c;各有优缺点&#xff1a; 短连接 短连接是指客户端与服务器完成一次数据交换后就断开连接。下次需要通信时&#xff0c;再重新建立连接。 特点&#xff1…...

C#委托(delegate)的常用方式

C# 中委托的常用方式&#xff0c;包括委托的定义、实例化、不同的赋值方式以及匿名委托的使用。 委托的定义 // 委托的核心是跟委托的函数结构一样 public delegate string SayHello(string c);public delegate string SayHello(string c);&#xff1a;定义了一个公共委托类型 …...

C#从入门到精通(35)—如何防止winform程序因为误操作被关闭

前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发的上位机软件运行起来以后,一般在右上角都有一个关闭按钮,正常情况下点击关闭按钮就能关闭软件,但是不排除我们不想关闭软件,但是因为不…...

docker本地镜像源搭建

最近Deepseek大火后&#xff0c;接到任务就是帮客户装Dify&#xff0c;每次都头大&#xff0c;因为docker源不能用&#xff0c;实在没办法&#xff0c;只好自己搭要给本地源。话不多说具体如下&#xff1a; 1、更改docker的配置文件&#xff0c;添加自己的私库地址&#xff0c…...

Sqlserver安全篇之_TLS的证书概念

证书的理解 参考Sqlserver的官方文档https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/certificate-overview?viewsql-server-ver16 TLS(Transport Layer Security)传输层安全和SSL(Secure Sockets Layer)安全套接字层协议位于应用程序协议层和TCP/…...

Kafka生产者相关

windows中kafka集群部署示例-CSDN博客 先启动集群或者单机也OK 引入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.9.0</version></dependency>关于主题创建 理论…...

技术问题汇总:前端怎么往后端传一个数组?

场景 现在一个专门负责复习算法的服务&#xff0c;筛选出了用户今天需要复习的笔记的ids&#xff0c;现在要调用笔记服务根据ids查询的接口。 请问复习服务怎么将ids发到笔记服务&#xff0c;笔记服务怎么接收。 思路 发的时候肯定是用字符串&#xff0c;接收的时候&#xf…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...