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

Docker搭建MySQL8主从复制

之前文章我们了解了面试官:说一说Binlog是怎么实现的,这里我们用Docker搭建主从复制环境。

docker安装主从MySQL

这里我们使用MySQL8.0.32版本:

主库配置

master.cnf

//基础配置
[client]
port=3306
socket=/var/run/mysqld/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysql.sock  //路径需要有mysql用户权限 建议直接在mysql目录
character-set-server=UTF8MB4
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #mysql8.0适配5.7语法//主从配置
server-id=1                     //id唯一,一般采用机器ip后缀
replicate-wild-ignore-table=mysql.*      # 忽略表//主库必须,从库不必须
log-bin=mysql-bin                       //in-log日志路径, 路径相对于 datadir
#binlog_cache_size=2M             //为每个session 分配的内存,如果事务大而且多,dml操作也频繁(2–4M)
log_slave_updates=1             //表示slave将复制事件写进自己的二进制日志
binlog_format=mixed              //数据混合复制同步

运行容器:

这里将数据及配置映射到本地。

docker run -p 4306:3306 --name mysql1 -v /Users/XXX/work/docker/data/mysql/mysql1:/var/lib/mysql -v /Users/XXX/work/docker/data/mysql/conf/master.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --privileged=true -d mysql:8.0.32

从库配置
//基础配置
[client]
port=3306
socket=/var/run/mysqld/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/var/run/mysql/mysql.sock  //路径需要有mysql用户权限 建议直接在mysql目录
character-set-server=UTF8MB4
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #mysql8.0适配5.7语法//主从配置
server-id=2                     //id唯一,一般采用机器ip后缀
replicate-wild-ignore-table=mysql.*      //忽略表

运行容器:

docker run -p 5306:3306 --name mysql2 -v /Users/XXX/work/docker/data/mysql/mysql2:/var/lib/mysql -v /Users/XXX/work/docker/data/mysql/conf/slave.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456  --privileged=true -d mysql:8.0.32

异步复制搭建

异步复制配置
  • 连接主库

mysql -h127.0.0.1 -uroot -p123456 -P4306
  • 主库创建复制用户,这里需要指定密码类型,MySQL8默认类型从库无法连接

CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'XXXX';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  • 查询主库状态

show master status;

图片

  • 连接从库

mysql -h127.0.0.1 -uroot -p123456 -P5306
  • 设置主库链接。

change master to master_host='192.168.1.10',master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=157,master_port=4306;

master_host :Master的地址。 由于这里使用docker容器部署,采用桥接模式,IP需要填写宿主机IP
master_port:Master的端口号
master_user:用于数据同步的用户,这里填我们新创建的用户主从同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上面主库中 File 字段的值
master_log_pos:从哪个 Position 开始读,即上面主库 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

  • 启动从库同步

start slave;
  • 查看同步状态

show slave status;

下图表示主库已连接成功:

图片

测试

主库创建测试数据库test,并创建表t1

图片

从库查看数据源已同步过来

图片

表也同步过来

图片

半同步复制搭建

半同步复制是使用额外的插件实现的,并非MySQL中内置的,因此必须单独安装相应插件之后才能启用。安装插件后,可以通过与之关联的系统变量来控制半同步复制的启用或禁用。在安装关联的插件之前,与半同步复制相关的系统变量不可用(因为这些系统变量是半同步复制插件携带的)。

由于半同步复制需要已经配置好异步复制且复制处于可用状态,这里我们直接使用上面的异步复制进行。

主库配置
  • 安装semi插件

install plugin rpl\_semi\_sync\_master soname 'semisync\_master.so';
  • 查看插件状态

show global variables like '%semi%';

图片

  • 开启半同步,并将主从错误连接超时时间改为3秒。

set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_timeout = 3000;

改后配置如下:

图片

从库配置
  • 设置从库

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled = 1;
  • 查看从库半同步配置

show global variables like '%semi%';

图片

  • 重启同步线程 必须重启从库的I/O线程,否则半同步复制不生效。重启I/O线程之后,从库会重新连接到主库,并注册为半同步的从库(如果是全新搭建的复制拓扑,可以忽略该步骤。但是,半同步复制的配置如果发生在异步复制的配置之后,则仍然需要此步骤):

stop slave io_thread;
start slave io_thread;

图片

到此半同步复制就配置完成了。

相关文章:

Docker搭建MySQL8主从复制

之前文章我们了解了面试官:说一说Binlog是怎么实现的,这里我们用Docker搭建主从复制环境。 docker安装主从MySQL 这里我们使用MySQL8.0.32版本: 主库配置 master.cnf //基础配置 [client] port3306 socket/var/run/mysqld/mysql.sock [m…...

【前端】日期转换

记录项目中需要处理的日期格式 默认vue2 初级版 将后端传来的数组 [2024/01/29 08:55:18, 2024/01/29 09:55:18, 2024/01/29 10:11:18]转为 [2024-01-29 08:55, 2024-01-29 09:55, 2024-01-29 10:11]方法 convertDateTimeFormat(arr) {var tempArr arr.map(function (dateT…...

Git 怎么设置用户的权限

在团队协作的软件开发中,对于版本控制系统Git来说,确保代码与数据的安全性至关重要。为了实现这一目标,Git提供了灵活且可定制的用户权限管理机制。下面将简单的探讨一下Git如何设置用户的权限,以及如何保护代码和数据。 用户身份…...

大端和小端模式介绍

介绍 “大端”和“小端”通常指的是字节序(Byte Order)的两种类型,也被称为端序(Endianness)。在多字节的数据类型(如整数)中,字节可以以不同的顺序存储,这影响了计算机…...

【vue】报错 Duplicate keys detected 解决方案

错误描述:Duplicate keys detected. This may cause an update error.错误直译:检测到重复的键。这可能会导致错误。错误原因:有相同父元素的多个子元素的v-for有相同的key值。 解决方法: return:{dataList:[{name:张三&#xf…...

机器学习_13_SVM支持向量机、感知器模型

文章目录 1 感知器模型1.1 感知器的思想1.2 感知器模型构建1.3 损失函数构建、求解 2 SVM3 线性可分SVM3.1 线性可分SVM—概念3.2 线性可分SVM —SVM 模型公式表示3.3 线性可分SVM —SVM 损失函数3.4 优化函数求解3.5 线性可分SVM—算法流程3.6 线性可分SVM—案例3.7 线性可分S…...

OpenCV学习记录——轮廓检测

文章目录 前言一、寻找、绘制轮廓二、具体应用代码 前言 寻找目标图像的轮廓并绘制出该轮廓是我们进行图像识别时常用的手段,轮廓是图像中连续的边界线,可以用于物体检测、形状分析等应用。为了获取更高的准确性,会先进行二值化处理&#xff…...

FreeRTOS任务挂起以及延时部分源码分析

layout: post title: “任务状态” date: 2023-7-19 15:39:08 0800 tags: FreeRTOS 任务状态 fireRTOS代码分析 任务挂起 //把一个任务挂起 void vTaskSuspend( TaskHandle_t xTaskToSuspend ) {TCB_t *pxTCB;taskENTER_CRITICAL();//进入临界区{/* 参数是NULL的时候设置为当…...

oracle数据库慢查询SQL

目录 场景: 环境: 慢SQL查询一: 问题一:办件列表查询慢 分析: 解决方法: 问题二:系统性卡顿 分析: 解决方法: 慢SQL查询二 扩展: 场景: 线…...

C语言搭配EasyX实现贪吃蛇小游戏

封面展示 内部展示 完整代码 #define _CRT_SECURE_NO_WARNINGS #include<easyx.h> #include<stdio.h> #include<mmsystem.h> #pragma comment (lib,"winmm.lib") #define width 40//宽有40个格子 #define height 30//长有40个格子 #define size 2…...

# 软件安装-Linux搭建nginx(单机版)

软件安装-Linux搭建nginx(单机版) 安装版本:nginx-1.24.0 文章目录 软件安装-Linux搭建nginx(单机版)一、Nginx包下载二、创建用户1.新建组和用户2.设置用户密码3.登录自己创建的目录三、安装依赖组件四、安装Nginx五、启动Nginx六、配置Nginx一、Nginx包下载 1. nginx-1.24下…...

成熟的汽车制造供应商协同平台 要具备哪些功能特性?

汽车行业是一个产业链长且“重”的行业&#xff0c;整个业务流程包括了研发、设计、采购、库存、生产、销售、售后等一系列环节&#xff0c;在每一个环节都涉及到很多信息交换的需求。对内要保证研发、采购、营销等业务环节信息流通高效安全&#xff0c;对外要与上、下游合作伙…...

React16源码: React中处理ref的核心流程源码实现

ref的实现过程 1 &#xff09;概述 在更新流程当中如何去设置ref上面的对象的过程在我们创建fiber的时候去处理ref这个属性那我们什么时候创建fiber对象? 就是我们去更新某一个节点&#xff0c;然后要去调和它的子节点的时候这个时候我们会对每一个子节点去创建这个fiber对象…...

ref和reactive

看尤雨溪说&#xff1a;为什么Vue3 中应该使用 Ref 而不是 Reactive&#xff1f;...

掌握数据预测的艺术:线性回归模型详解

线性回归是统计学中用于建模两个或多个变量之间线性关系的一种方法,广泛应用于数据分析、机器学习等领域。从数学建模的角度出发,线性回归旨在找到一个线性方程,最好地描述自变量(或称为解释变量、特征变量)和因变量(或称为目标变量)之间的关系。本文将通过Python代码示…...

STM32F407移植OpenHarmony笔记8

继上一篇笔记&#xff0c;成功开启了littlefs文件系统&#xff0c;能读写FLASH上的文件了。 今天继续研究网络功能&#xff0c;让控制台的ping命令能工作。 轻量级系统使用的是liteos_m内核lwip协议栈实现网络功能&#xff0c;需要进行配置开启lwip支持。 lwip的移植分为两部分…...

C++:输入流/输出流

C流类库简介 C为了克服C语言中的scanf和printf存在的缺点。&#xff0c;使用cin/cout控制输入/输出。 cin&#xff1a;表示标准输入的istream类对象&#xff0c;cin从终端读入数据。cout&#xff1a;表示标准输出的ostream类对象&#xff0c;cout向终端写数据。cerr&#xff…...

十、Qt三维图表

一、Data Visualization模块概述 Data Visualization的三维显示功能主要有三种三维图形来实现&#xff0c;三各类的父类都是QAbstract3DGraph&#xff0c;从QWindow继承而来。这三类分别是&#xff1a;三维柱状图Q3DBar三维空间散点Q3DScatter三维曲面Q3DSurface 1、相关类的…...

CMake官方教程中文翻译 Step 6: Adding Support for a Testing Dashboard

鉴于自己破烂的英语&#xff0c;所以把cmake的官方文档用 谷歌翻译 翻译下来方便查看。 英语好的同学建议直接去看cmake官方文档&#xff08;英文&#xff09;学习&#xff1a;地址 点这里 或复制&#xff1a;https://cmake.org/cmake/help/latest/guide/tutorial/index.html …...

【leetcode】完全背包总结

本文内容参考了代码随想录&#xff0c;并进行了自己的总结。 完全背包 关键点 ● 每件物品有若干种状态&#xff1a;不选、选 1 件、选 2 件、…、选 n 件 代码 在代码上&#xff0c;只有重量的遍历方向和 01 背包不一样&#xff1a; for(int i 0; i < nums.length; i…...

OpenClaw模型热切换方案:Qwen2.5-VL-7B与其他模型无缝交替使用

OpenClaw模型热切换方案&#xff1a;Qwen2.5-VL-7B与其他模型无缝交替使用 1. 为什么需要模型热切换&#xff1f; 去年夏天&#xff0c;我接手了一个跨部门协作项目&#xff0c;需要同时处理技术文档摘要、会议纪要整理和社交媒体图片分析三种任务。最初用单一模型处理所有需…...

HelloWord-Keyboard固件编程完全指南:从零掌握机械键盘定制开发

HelloWord-Keyboard固件编程完全指南&#xff1a;从零掌握机械键盘定制开发 【免费下载链接】HelloWord-Keyboard 项目地址: https://gitcode.com/gh_mirrors/he/HelloWord-Keyboard 想要打造属于自己的智能机械键盘吗&#xff1f;HelloWord-Keyboard项目为你提供了一个…...

DIY电源设计避坑指南:为什么你的滤波电路总达不到理想效果?

DIY电源设计避坑指南&#xff1a;为什么你的滤波电路总达不到理想效果&#xff1f; 在创客工作坊或学生电子竞赛中&#xff0c;一个稳定可靠的电源往往是项目成功的基础。但许多爱好者都会遇到这样的困扰&#xff1a;明明按照教科书设计了滤波电路&#xff0c;示波器上的纹波却…...

Debian根文件系统定制:从零构建到实战优化

1. Debian根文件系统入门指南 第一次听说"根文件系统"这个概念时&#xff0c;我也是一头雾水。简单来说&#xff0c;它就像是你电脑的操作系统"骨架"——包含了启动、运行和管理系统所需的所有核心文件和目录。想象一下盖房子&#xff0c;根文件系统就是地…...

从PyTorch到FPGA:手把手教你将MobileNetV2模型部署到Zynq平台(附完整代码)

从PyTorch到FPGA&#xff1a;手把手教你将MobileNetV2模型部署到Zynq平台&#xff08;附完整代码&#xff09; 在边缘计算领域&#xff0c;FPGA因其低延迟、高能效和可重构特性&#xff0c;正成为轻量级CNN模型部署的理想选择。本文将带您完成一个从PyTorch模型训练到Xilinx Zy…...

Qwen3.5本地部署,非常详细收藏我这一篇就够了

这一篇我们来聊点更实际的——怎么本地跑起来。 397B 参数的模型&#xff0c;哪怕只激活 17B&#xff0c;完整模型也有 807GB。听起来吓人&#xff0c;但实际上&#xff0c;得益于 Unsloth 的 Dynamic 2.0 量化技术&#xff0c;192GB 内存的 Mac 就能跑 3-bit 版本&#xff0c…...

LVGL实战:手把手教你用FatFS给STM32上的LVGL挂载SD卡文件系统(附多设备管理技巧)

LVGL实战&#xff1a;STM32多存储设备文件系统集成与优化指南 在嵌入式UI开发中&#xff0c;资源管理往往成为制约项目灵活性的瓶颈。当LVGL界面需要加载大量图片、字体等外部资源时&#xff0c;如何高效管理SD卡、SPI Flash等多种存储介质&#xff0c;成为提升开发效率的关键。…...

STM32F4标准库实战:用DMA+FSMC驱动TFT-LCD,让你的GUI刷新快人一步(附避坑指南)

STM32F4标准库实战&#xff1a;DMAFSMC驱动TFT-LCD的性能飞跃与避坑全攻略 在嵌入式GUI开发中&#xff0c;流畅的界面刷新体验往往决定着产品的第一印象。当你在STM32F4平台上使用LVGL或emWin时&#xff0c;是否遇到过这些场景&#xff1a;手指滑动列表时的明显卡顿、动画渲染…...

Windows HEIC缩略图终极指南:免费解决iPhone照片预览问题

Windows HEIC缩略图终极指南&#xff1a;免费解决iPhone照片预览问题 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是否曾将…...

验证码安全避坑指南:为什么你的Burp拦截总失败?从原理到修复方案

验证码安全避坑指南&#xff1a;为什么你的Burp拦截总失败&#xff1f;从原理到修复方案 验证码作为现代Web应用中最基础的安全防线之一&#xff0c;却常常因为设计缺陷沦为"纸老虎"。本文将深入剖析验证码机制的七大致命漏洞&#xff0c;并给出可落地的加固方案。 1…...