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:张三…...

机器学习_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学习记录——轮廓检测
文章目录 前言一、寻找、绘制轮廓二、具体应用代码 前言 寻找目标图像的轮廓并绘制出该轮廓是我们进行图像识别时常用的手段,轮廓是图像中连续的边界线,可以用于物体检测、形状分析等应用。为了获取更高的准确性,会先进行二值化处理ÿ…...
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下…...

成熟的汽车制造供应商协同平台 要具备哪些功能特性?
汽车行业是一个产业链长且“重”的行业,整个业务流程包括了研发、设计、采购、库存、生产、销售、售后等一系列环节,在每一个环节都涉及到很多信息交换的需求。对内要保证研发、采购、营销等业务环节信息流通高效安全,对外要与上、下游合作伙…...
React16源码: React中处理ref的核心流程源码实现
ref的实现过程 1 )概述 在更新流程当中如何去设置ref上面的对象的过程在我们创建fiber的时候去处理ref这个属性那我们什么时候创建fiber对象? 就是我们去更新某一个节点,然后要去调和它的子节点的时候这个时候我们会对每一个子节点去创建这个fiber对象…...

ref和reactive
看尤雨溪说:为什么Vue3 中应该使用 Ref 而不是 Reactive?...
掌握数据预测的艺术:线性回归模型详解
线性回归是统计学中用于建模两个或多个变量之间线性关系的一种方法,广泛应用于数据分析、机器学习等领域。从数学建模的角度出发,线性回归旨在找到一个线性方程,最好地描述自变量(或称为解释变量、特征变量)和因变量(或称为目标变量)之间的关系。本文将通过Python代码示…...

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

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

十、Qt三维图表
一、Data Visualization模块概述 Data Visualization的三维显示功能主要有三种三维图形来实现,三各类的父类都是QAbstract3DGraph,从QWindow继承而来。这三类分别是:三维柱状图Q3DBar三维空间散点Q3DScatter三维曲面Q3DSurface 1、相关类的…...
CMake官方教程中文翻译 Step 6: Adding Support for a Testing Dashboard
鉴于自己破烂的英语,所以把cmake的官方文档用 谷歌翻译 翻译下来方便查看。 英语好的同学建议直接去看cmake官方文档(英文)学习:地址 点这里 或复制:https://cmake.org/cmake/help/latest/guide/tutorial/index.html …...
【leetcode】完全背包总结
本文内容参考了代码随想录,并进行了自己的总结。 完全背包 关键点 ● 每件物品有若干种状态:不选、选 1 件、选 2 件、…、选 n 件 代码 在代码上,只有重量的遍历方向和 01 背包不一样: for(int i 0; i < nums.length; i…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...

第2课 SiC MOSFET与 Si IGBT 静态特性对比
2.1 输出特性对比 2.2 转移特性对比 2.1 输出特性对比 器件的输出特性描述了当温度和栅源电压(栅射电压)为某一具体数值时,漏极电流(集电极电流...