MySQL 主备环境搭建 docker

news2024/11/19 9:39:05

MySQL 主备环境搭建 docker

拉取docker镜像

sudo docker pull mysql:8.0

启动容器

docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

配置 Master(主)

修改my.cnf,8.0版本默认路径是/etc/my.cnf

[mysqld]
server-id=1
log-bin=mysql-bin

连接master mysql,创建主备用户,授予用户 slave REPLICATION SLAVE 权限和 REPLICATION CLIENT 权限,用于在主从库之间同步数据。

CREATE USER 'zzy'@'%' IDENTIFIED WITH mysql_native_password BY 'zzy';
GRANT REPLICATION SLAVE ON *.* TO 'zzy'@'%'
GRANT REPLICATION CLIENT ON *.* TO 'zzy'@'%';

配置Slave(从)

[mysqld]
server-id=2
log-bin=mysql-bin
log-bin=mysql-slave-bin 
## relay_log配置中继日志
relay_log=mysql-relay-bin

重启两个容器

docker restart <container-id>

链接 Master (主) 和 Slave (从)

在 Master 进入 mysql,执行 show master status;

记录File 和 Position 字段的值

在 Slave 中进入 mysql,执行

CHANGE MASTER TO master_host = '172.17.0.2',
master_user = 'zzy',
master_password = 'zzy',
master_port = 3306,
master_log_file = 'mysql-bin.000001',
master_log_pos = 617,
master_connect_retry = 30;
master auto_position=1;

CHANGE MASTER TO 
    MASTER_HOST='172.17.0.2',
    MASTER_USER='zzy',
    MASTER_PASSWORD='zzy',
    MASTER_PORT=3306,
    MASTER_AUTO_POSITION=1,
    MASTER_CONNECT_RETRY=30;

master_auto position=1;是使用GTID(全局事务 ID)来方便进行主备切换

在主库和从库的 my.cnf 配置文件中添加以下内容:
# 在主库的 my.cnf 中
[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ON
log-bin=mysql-bin
binlog_format=ROW
server-id=1

# 在从库的 my.cnf 中
[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ON
log-bin=mysql-bin
binlog_format=ROW
server-id=2

master_port:Master 的端口号,指的是容器的端口号。可以使用docker inspect 来查看ip地址

[zcy@gp-master ~]$ docker inspect mysql-slave | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",

master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是 60 秒

然后输入来查看主备复制状态

show slave status \G;

正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是 No,因为我们还没有开启主从复制过程。使用 start slave 开启主从复制过程,然后再次查询主从同步状态 show slave status \G;

SlaveIORunning 和 SlaveSQLRunning 都是 Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。

错误处理

使用 start slave 开启主从复制过程后,如果 SlaveIORunning 一直是 Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error 提示予以排除。

  • 网络不通:检查 ip, 端口
  • 密码不对:检查是否创建用于同步的用户和用户密码是否正确
  • pos 不对: 检查 Master 的 Position

如果配置的时候参数填错了,可能导致docker 容器一直无法正常启动,无法修改参数,可以通过下面的指令pull和push文件来完成修改:

sudo docker cp mysql-slave:/etc/my.cnf ./my.cnf

sudo docker cp ./my.cnf mysql-slave:/etc/my.cnf

测试主从复制

Untitled

查看从库是否有对应的库:

Untitled

完整的主备流程图

Untitled

可以看到:主库接收到客户端的更新请求后,执行内部事务的更新逻辑,同时写入 binlog。

备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长连接。

一个事务日志同步的完整过程是这样的:

  1. 在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码、以及要从哪个位置开始请求 binlog,这个位置包含文件名和日志偏移量。
  2. 在备库 B 上执行 start slave 命令,这时侯备库会启动两个线程,io_thread 和 sql_thread。其中, io_thread 负责与主库建立连接。
  3. 主库 A 校验完用户名、密码后,开始按照备库 B 传过来的位置,从本地读取 binlog,发给 B。
  4. 备库 B 拿到 binlog 后,写到本地文件,称为中转日志(relay log)。
  5. sql_thread 读取中转日志,解析日志里的命令,并执行。

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

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

相关文章

通过域名接口申请免费的ssl多域名证书

来此加密已顺利接入阿里云的域名接口&#xff0c;用户只需一键调用&#xff0c;便可轻松完成域名验证&#xff0c;从而更高效地申请证书。接下来&#xff0c;让我们详细解读一下整个操作过程。 来此加密官网 免费申请SSL证书 免费SSL多域名证书&#xff0c;泛域名证书。 首先&a…

linux 错误记录(三)

这里的内核源码路径&#xff1a; cd /usr/src/linux-headers-5.4.0-150-generic/ 内核版本&#xff1a; $ uname -r 5.4.0-150-generic 错误现象 ./include/uapi/asm-generic/int-ll64.h:12:10: fatal error: asm/bitsperlong.h: No such file or directory 搜索后是有的 …

STM32控制HC-SR04超声模块获取距离

欢迎入群共同学习交流 时间记录&#xff1a;2024/5/23 一、模块介绍 &#xff08;1&#xff09;引脚介绍 VCC&#xff1a;电源引脚&#xff0c;接单片机3.3/5V GND&#xff1a;电源地 Trig&#xff1a;超声信号触发引脚 Echo&#xff1a;超声信号接收引脚 &#xff08;2&…

热红外传感器

热红外传感器 一、热红外测温原理二、热红外传感器三、MLX90640-D55(MLX90640-BAB)测试 一、热红外测温原理 自然界中当物体的温度高于 绝对零度 时&#xff0c;由于它内部 热运动 的存在,就会不断地向四周辐射电磁波&#xff0c;其中就包含了波段位于0.75&#xff5e;100μm …

Unity Render入门

概述 在unity中渲染相关的组件是和Render关联的&#xff0c;比如我们常见的3D模型中的MeshRender&#xff0c;UI中的RenderCanvas等都是和Render相关联的&#xff0c;相信在unity的学习过程中&#xff0c;一定看到过非常多和Render相关的内容&#xff0c;那让我们学习一下这部…

Invoking “make cmake_check_build_system“ failed

前言&#xff1a; 在看过站内其他的方法且试过之后没奏效之后&#xff0c;偶然&#xff0c;无意间&#xff0c;随手整对了&#xff0c;然后后续在老赵的文档也找到了原因&#xff0c;对的上号&#xff0c;那在此我提出一种新的方法&#xff0c;且很简单的小tips。首先先来看看…

对列表进行统计和计算

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Python的列表提供了内置的一些函数来实现统计、计算的功能。下面介绍几种常用的功能。 &#xff08;1&#xff09;获取指定元素出现的次数 使用列表…

shell 脚本笔记2

3.env与set区别 env用于查看系统环境变量 set用于查看系统环境变量自定义变量函数 4.常用环境变量 变量名称含义PATH命令搜索的目录路径, 与windows的环境变量PATH功能一样LANG查询系统的字符集HISTFILE查询当前用户执行命令的历史列表 Shell变量&#xff1a;自定义变量 目标…

极光笔记|EngageLab AppPush引入全封装语音播报SDK

推送语音播报简介 语音播报是一种通知方式&#xff0c;在收到通知的时候&#xff0c;用户不用拿起手机查看&#xff0c;直接通过语音播报方式了解通知内容&#xff0c;节省时间提高工作效率。主要适用于商家交易收费通知&#xff0c;用户之间转账通知、公交车到站等场景。 语…

虚拟机安装Windows server 2022时蓝屏Boot Manager解决方案

文章目录 问题一、问题思路分析二、解决方案总结 问题 我在VMware虚拟机中安装Windows server 2022时无法正常安装&#xff0c;会进入Boot Manager界面 点击 Boot normally后过一会儿还会跳转到此页面 一、问题思路分析 简单的判断一下这是一个引导问题&#xff0c;那么可能是…

容器组件:栅格布局,侧边栏容器(HarmonyOS学习第四课【4.5】)

栅格布局 栅格布局可以为布局提供规律性的结构&#xff0c;解决多尺寸多设备的动态布局问题&#xff0c;保证不同设备上各个模块的布局一致性。 栅格容器组件&#xff0c;仅可以和栅格子组件(GridCol)在栅格布局场景中使用。 说明 该组件从API Version 9开始支持。后续版本…

Day35 代码随想录打卡|二叉树篇---二叉树的层序遍历

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 方法&#xff1a;二叉树的层序遍历感觉是相对简单的&#xff0c;只需要定义一个队列&#xff0c;从根节点开始放入队列…

ArrayBlockQueue原理分析

1.简介 它是带有生产者-消费者模式实现的并发容器&#xff0c;同样用来解决高并发场景下多线程之间数据共享的问题。Arra不支持扩缩容&#xff0c;其容量大小在初始化时就已经确定好了&#xff0c;尽管字面意义上来看它属于阻塞队列的一种&#xff0c;但它同时还提供了一些非阻…

【python】python省市水资源数据分析可视化(源码+数据)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

leetCode-hot100-数组专题之区间问题

数组专题之区间问题 知识点&#xff1a;解决思路&#xff1a;例题56.合并区间57.插入区间253.会议室 Ⅱ485.无重叠区间 数组区间问题是算法中常见的一类问题&#xff0c;它们通常涉及对数组中的区间进行排序、合并、插入或删除操作。无论是合并区间、插入区间还是删除重复空间&…

Windows10安装Docker Desktop - WSL update failed

按照提示更新wsl后&#xff0c;仍然会报错&#xff0c;github上没有找到解决方法。版本28、29、30都会报这个错。 经过尝试&#xff0c;将docker内的设置中&#xff0c;采用wsl禁掉即可。如下图&#xff1a;

【C语言回顾】联合和枚举

前言1. 联合体1.1 联合体的声明1.2 联合体的特点1.3 联合体的使用 2. 枚举2.1 枚举的声明2.2 枚举的特点2.3 枚举的使用 结语 #include<GUIQU.h> int main { 上期回顾: 【C语言回顾】结构体 个人主页&#xff1a;C_GUIQU 专栏&#xff1a;【C语言学习】 return 一键三连;…

大数据技术原理(二):搭建hadoop伪分布式集群这一篇就够了

&#xff08;实验一 搭建hadoop伪分布式&#xff09; -------------------------------------------------------------------------------------------------------------------------------- 一、实验目的 1.理解Hadoop伪分布式的安装过程 实验内容涉及Hadoop平台的搭建和…

有史以来最大的苹果手机?iPhone 16屏幕模组大升级

随着科技的不断进步&#xff0c;用户对于手机屏幕的需求也在不断提高。从最初的触控体验到如今的高分辨率、高刷新率&#xff0c;屏幕技术的发展日新月异。而据最新的消息显示&#xff0c;即将到来的iPhone 16系列将在屏幕模组上进行一次重大升级&#xff0c;有望成为有史以来最…

建模:Maya

一、常用按键 1、alt 左键 —— 环绕查看 2、alt 中键 —— 拖动模型所在面板 3、空格 —— 进入三视图模式&#xff1b;空格 左键按住拖动 —— 切换到对应视图 二、骨骼归零 1、T Pose 旋转模式&#xff0c;点击模型&#xff0c;摆好T姿势即可 2、复制模型设置200距离…