使用Docker 实现 MySQL 循环复制(三)

系列文章

使用Docker 实现 MySQL 循环复制(一)
使用Docker 实现 MySQL 循环复制(二)


目录

  • 系列文章
  • 1. 在主机上安装MySQL客户端
  • 2. 配置循环复制拓扑
    • 2.1 进入容器
    • 2.2 创建复制用户并授予复制权限
    • 2.3 复位二进制日志
    • 2.4 配置环形复制拓扑
    • 2.5 导入测试数据并测试复制功能
    • 2.6 研究一下 GTID 在 MySQL 复制中的重要作用
  • 3. 常见出错与解决方法


1. 在主机上安装MySQL客户端

dnf install -y mysql

在这里插入图片描述

在主机验证三个 mysql 容器,功能正常:

mysql -uroot -poracle -hdocker-host --port=3306 -e "show variables like 'server_id';" 
mysql -uroot -poracle -hdocker-host --port=3307 -e "show variables like 'server_id';"
mysql -uroot -poracle -hdocker-host --port=3308 -e "show variables like 'server_id';"
  • 通过命令行连接到 MySQL 数据库并查询 server_id 参数的值
  • -h docker-host 表示连接到本地主机,docker-host 是主机名
  • --port=3308 表示使用 3308 端口连接
  • -e 后面跟的是 SQL 查询语句,这里是 show variables like 'server_id',用于查看 server_id 参数的值
    在这里插入图片描述

2. 配置循环复制拓扑

分别进入三个 MySQL 容器内,配置循环复制拓扑。循环复制拓扑里,每个主机既是主服务器又是从属服务器。 要在主服务器上做的操作是:

  1. 创建用于执行复制的 repl 数据库用户
  2. 授予用户 replacation slave权限

要在从属服务器上做的操作是:

  1. 修改角色为slave
  2. 启动复制线程

2.1 进入容器

分别进入三个 MySQL 容器内:

docker exec -it mysql-3-mysql1-1 /bin/bash
docker exec -it mysql-3-mysql2-1 /bin/bash
docker exec -it mysql-3-mysql3-1 /bin/bash

在这里插入图片描述
然后连接MySQL服务器,并修改提示符:

mysql -uroot -p
prompt mysql-1>;	

在这里插入图片描述

2.2 创建复制用户并授予复制权限

在三个 mysql 上分别创建用于执行复制的 repl 数据库用户,口令为 oracle,并授予replacation slave权限。

  • 每个从服务器需要一个合法的账户来连接主服务器并拉取二进制日志(binlog)事件。创建一个专用的复制用户可以提供一个安全的身份验证机制,确保只有授权的从服务器可以连接到主服务器
  • REPLICATION SLAVE权限是必要的,因为它允许复制用户从主服务器读取二进制日志,这是复制过程的基础。没有这个权限,从服务器将无法从主服务器获取更新
CREATE USER 'repl' IDENTIFIED WITH mysql_native_password BY 'oracle';
GRANT REPLICATION SLAVE ON *.* TO 'repl';

在这里插入图片描述

2.3 复位二进制日志

然后分别在三个 mysql 数据库上执行 reset master;复位二进制日志,以防止重复创建 repl 用户:

RESET MASTER;

在这里插入图片描述

2.4 配置环形复制拓扑

配置mysql2 为 mysql1 的从属服务器;mysql3 为 mysql 2 的从属服务器;mysql1 为 mysql 3 的从属服务器。这样就形成了一个环形的复制拓扑结构。

所以要分别在三个MySQL里执行语句去修改角色为slave并启动复制线程。

mysql 1:

CHANGE MASTER TO 
master_host='192.168.30.128', 
MASTER_PORT=3308, 
MASTER_AUTO_POSITION=1; 
START SLAVE USER='repl' PASSWORD='oracle';

在这里插入图片描述

mysql 2:

CHANGE MASTER TO 
master_host='192.168.30.128', 
MASTER_PORT=3306, 
MASTER_AUTO_POSITION=1; 
START SLAVE USER='repl' PASSWORD='oracle';

在这里插入图片描述

mysql 3:

CHANGE MASTER TO 
master_host='192.168.30.128', 
MASTER_PORT=3307, 
MASTER_AUTO_POSITION=1; 
START SLAVE USER='repl' PASSWORD='oracle';

在这里插入图片描述

启动线程后检查从属服务器的状态:

show slave status\G

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 导入测试数据并测试复制功能

在 mysql-3-mysql1-1 容器上创建 world 库:
在这里插入图片描述
因为复制拓扑已经建立,所以另外两个容器上的MySQL数据库会同步数据,所以现在三个容器上都有world数据库了,下面在 mysql-3-mysql2-1 容器上导入 world 数据库,下载 world.sql 转储文件,在第三个容器(3308 端口)导入,并在三个数据库中检查数据是都同步。
我们先退出容器,然后下载world.sql 转储文件:

wget https://github.com/memories198/mysql-3/releases/download/mysql/world.sql

在这里插入图片描述
在第三个容器(3308 端口)导入:

mysql -u root -poracle -hdocker-host --port=3308 world < world.sql;

在这里插入图片描述
然后分别进入3个容器中查看数据是否同步:
在这里插入图片描述
在第二个容器中删除大于 4070 的行,检查三个数据库的数据一致性:
在这里插入图片描述

2.6 研究一下 GTID 在 MySQL 复制中的重要作用

GTID (Global Transaction ID) 是一种用于唯一标识数据库事务的方法。它由两部分组成:源服务器 ID 和一个递增的序列号。当一个事务被提交时,MySQL 自动为这个事务分配一个新的 GTID,并将其添加到 Executed_Gtid_Set 变量中。
Retrieved_Gtid_Set 表示已经从其他服务器接收并应用的 GTID,而 Executed_Gtid_Set 则表示在这个服务器上已经执行过的 GTID。

使用GTID的好处;

  1. 简化复制配置:使用 GTID 后,不再需要手动跟踪二进制日志文件名和位置,只需要指定主从关系即可。这大大简化了复制配置过程。
  2. 支持复杂的复制拓扑:GTID 允许更灵活的复制拓扑结构,如多源复制、环形复制等。这是因为 GTID 能够确保每个事务在整个集群中都是唯一的。
  3. 提高故障恢复效率:如果某个节点发生故障,可以快速找到最后一个已处理的 GTID,从而确定需要重新同步的数据范围,提高故障恢复效率。

在这里插入图片描述

3. 常见出错与解决方法

IO线程未正常启动:

  • 检查机器/容器之间的连通性
  • 检查配置文件是否写错
  • stop slave 停掉复制线程,然后resert master 复位二进制日志,在此之前先使拓扑里的数据库数据一致。然后重新建立主从关系

SQL线程未正常启动:

  • 因为是学习环境,所以直接stop slave 停掉复制线程,然后resert master 复位二进制日志,然后重新建立主从关系。注意在此之前先使拓扑里的数据库数据一致

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

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

相关文章

信息安全工程师题

物理隔离技术要求两台物理机物理上并不直连&#xff0c;只能进行间接的信息交换。所以防火墙不能实现网络的物理隔离Web应用防火墙可以防止SQL注入、xss攻击、恶意文件上传、远程命令执行、文件包含、恶意扫描拦截等&#xff1b;可以发现并拦截恶意的Web代码&#xff1b;可防止…

详解MLOps,从Jupyter开发到生产部署

大家好&#xff0c;Jupyter notebook 是机器学习的便捷工具&#xff0c;但在应用部署方面存在局限。为了提升其可扩展性和稳定性&#xff0c;需结合DevOps和MLOps技术。通过自动化的持续集成和持续交付流程&#xff0c;可将AI应用高效部署至HuggingFace平台。 本文将介绍MLOps…

色彩与故乡的对话 —— 钱华个人油画展正式开展

色彩与故乡的对话 —— 钱华个人油画展正式开展 2024年7月17日 &#xff0c;在宁波这座历史与现代交织的城市里&#xff0c;艺术与文化的碰撞再次绽放出耀眼的光芒。由宁波海曙区美术家协会主办&#xff0c;宁波市海纳广场开发经营有限公司协办的“色彩与故乡的对话——钱华个人…

HDLC(高级数据链路控制协议)的定义、数据结构、状态检测、基本配置、特点及限制

一、HDLC的定义 HDLC是一种面向比特的对用同步串行数字链路封装协议。 面向比特:对于任何比特流,HDLC都可以实现透明的传输; 同步串行:应用于同步串行线路; 应用于接口:在同步模式下的Serial接口和pos接口; 只支持点到点链路,通过keepalive报文来检测链路状态。 …

pnpm build打包时占内溢出

这两天在打包H5网页的时候失败&#xff0c;总是提示下方错误 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 严重错误&#xff1a;堆限制附近标记压缩无效分配失败 - JavaScript 堆内存不足 尝试了多种方法&…

使用Docker 实现 MySQL 循环复制(二)

系列文章 使用Docker 实现 MySQL 循环复制&#xff08;一&#xff09; 目录 系列文章1. 创建三个 mysql 容器1.1 准备三个 mysql 容器的挂载卷1.2 为三个mysql实例创建配置文件1.3 修改各目录的权限以满足 mysql 容器的要求1.4 创建 docker-compose.yaml 文件1.5 创建容器 1. …

记录一下在Hyper-v中动态磁盘在Ubuntu中不完全用到的问题(扩展根目录)

在之前给hyper虚拟机的Ubuntu分配磁盘有20G&#xff1b; 后来在Ubuntu中查看磁盘发现有一个分区没用到&#xff1a; 贴的图片是完成扩展后的 之前这里是10G&#xff0c;然后有个dev/sda4的分区&#xff0c;也是10G&#xff0c;Type是Microsoft Basic Data&#xff1b; …

实现了一个心理测试的小程序,微信小程序学习使用问题总结

1. 如何在跳转页面中传递参数 &#xff0c;在 onLoad 方法中通过 options 接收 2. radio 如何获取选中的值&#xff1f; bindchange 方法 参数e, e.detail.value 。 如果想要获取其他属性&#xff0c;使用data-xx 指定&#xff0c;然后 e.target.dataset.xx 获取。 3. 不刷…

项目实用linux 操作详解-轻松玩转linux

我之前写过完整的linux系统详解介绍&#xff1a; LInux操作详解一&#xff1a;vmware安装linux系统以及网络配置 LInux操作详解二&#xff1a;linux的目录结构 LInux操作详解三&#xff1a;linux实际操作及远程登录 LInux操作详解四&#xff1a;linux的vi和vim编辑器 LInux操作…

剧本杀小程序搭建,为商家带来新的收益方向

近几年&#xff0c;剧本杀游戏成为了游戏市场的一匹黑马&#xff0c;受到了不少年轻玩家的欢迎。随着信息技术的快速发展&#xff0c;传统的剧本杀门店已经无法满足游戏玩家日益增长的需求&#xff0c;因此&#xff0c;剧本杀市场开始向线上模式发展&#xff0c;实现行业数字化…

灵雀云AML:赋能金融AI,构建数智时代核心竞争力

在人工智能&#xff08;AI&#xff09;技术的迅猛发展中&#xff0c;金融行业正迈入变革的新时代。AI不仅在优化投资决策、信用评估、实时监控和欺诈识别方面展现出强大功能&#xff0c;还极大地提升了客户体验、降低了运营成本&#xff0c;并推动了产品创新。面对智能时代的挑…

唯众特色软件开发实训室解决方案

特色软件开发实训室解决方案旨在构建一个全方位、高度灵活且效率卓越的实训生态系统&#xff0c;它不仅仅是一个学习空间&#xff0c;更是一个让学生能够身临其境&#xff0c;在模拟真实工作环境中锤炼技能的实战场。通过精心设计的实训项目与案例&#xff0c;学生能够在实践中…

在Ubuntu上安装redis

Ubuntu上安装redis 一、通过下载redis的压缩包安装二、通过apt包管理器安装Redis三、修改redis的配置文件四、控制redis启动 Redis是一种开源的内存数据存储&#xff0c;可以用作数据库、缓存和消息代理等。本文将会介绍两种不同的安装方式&#xff0c;包括通过压缩包安装以及通…

日志之ELK使用讲解

文章目录 1 ELK1.1 ELK 简介1.1.1 Logstash1.1.2 Elasticsearch1.1.3 Kibana 1.2 ELK 实现方案1.3 ELK 平台搭建1.3.1 安装 Logstash1.3.2 安装 Elasticsearch1.3.3 安装 Kibana 1.4 在 SpringBoot 中使用 ELK1.4.1 修改并部署 Spring Boot 项目1.4.2 配置 Shipper 角色 Logsta…

国内从事双臂机器人的团队

一、背景 随着人形机器人的发展&#xff0c;双臂协同操作得到了越来越多研究人员的关注。我自己也是做双臂机器人方向的&#xff0c;虽然通过看论文或刷知乎了解到国内有许多团队在做双臂机器人方向&#xff0c;但还没有系统的整理过&#xff0c;因此趁这次机会&#xff0c;好…

【C++进阶学习】第七弹——AVL树——树形结构存储数据的经典模块

二叉搜索树&#xff1a;【C进阶学习】第五弹——二叉搜索树——二叉树进阶及set和map的铺垫-CSDN博客 目录 一、AVL树的概念 二、AVL树的原理与实现 AVL树的节点 AVL树的插入 AVL树的旋转 AVL树的打印 AVL树的检查 三、实现AVL树的完整代码 四、总结 前言&#xff1a…

前端轻松拿捏!最简全栈登录认证和权限设计!

本项目代码已开源&#xff0c;具体见&#xff1a; 前端工程&#xff1a;vue3-ts-blog-frontend 后端工程&#xff1a;express-blog-backend 数据库初始化脚本&#xff1a;关注公众号程序员白彬&#xff0c;回复关键字“博客数据库脚本”&#xff0c;即可获取。 前端走向全栈&am…

宋仕强谈狼性营销与五看三定

宋仕强说余承东董宇辉联合宣传&#xff0c;他们的狼性营销我们要学习&#xff0c;我们金航标和萨科微要认真学习华为的先进理念和成功经验&#xff0c;和“五看三定”思维和工作模型&#xff0c;让管理团队深度思考&#xff0c;再不断实践。在产品定义和市场定位方面&#xff0…

小程序js 把链接转换为二维码

GitHub - Rookie-M/weapp-qrcode: weapp.qrcode.js 在 微信小程序 中&#xff0c;快速生成二维码 1.要下载上面地址的插件包 2.引用 import drawQrcode from ../../utils/weapp.qrcode.minonLoad(options) {let that thisconsole.log(JSON.parse(options.info))that.setData…

Ubuntu 24.04 LTS 桌面安装MT4或MT5 (MetaTrader)教程

运行脚本即可在 Ubuntu 24.04 LTS Noble Linux 上轻松安装 MetaTrader 5 或 4 应用程序&#xff0c;使用 WineHQ 进行外汇交易。 MetaTrader 4 (MT4) 或 MetaTrader 5 是用于交易外汇对和商品的流行平台。它支持各种外汇经纪商、内置价格分析工具以及通过专家顾问 (EA) 进行自…