基于 Docker 的 MySQL 主从复制搭建(Mac M1版本)

news2024/11/26 0:24:23

系统:Macbook M1

镜像版本:mysql:5.7

如果是要查 slave连接不上 master的问题,可以直接跳到文章末尾踩坑处

准备工作

  1. 拉取镜像
docker pull mysql:5.7
  1. 本地数据卷挂载

因为mysql不挂载的话,重启丢失数据,所以在本地创建三个空的文件夹conf、data、log即可

部署mysql_master(主)

  1. 运行master容器

不加 --platform linux/amd64会导致出现
The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested的提示,
容器虽然可以通过Docker Desktop手动启动,但是总觉得这样不对,然后谷歌问题之后看到这个篇文章:https://stackoverflow.com/questions/72152446/warning-the-requested-images-platform-linux-amd64-does-not-match-the-detecte后说加了这个就可以不报错

docker run --platform linux/amd64 -p 3309:3306 --name mysql_master \

-v /Users/miaomk/docker/volume/mysql/cluster/_master/log:/var/log/mysql \

-v //Users/miaomk/docker/volume/mysql/cluster/_master/data:/var/lib/mysql \

-v /Users/miaomk/docker/volume/mysql/cluster/_master/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=master123 \

-d mysql:5.7
  1. 查看容器是否启动成功
docker ps

在这里插入图片描述

  1. 测试数据库连接

在这里插入图片描述

  1. 配置mysql_master挂载位置的my.cnf
[mysqld]
#要唯一
server_id=100
#开启bin log
log-bin=master-mysql.bin
binlog_format=mixed
expire_logs_days=7
#跳过主健重复
slave_skip_errors=1062
  1. 重启mysql_master容器
docker restart mysql_master

docker ps

6.进行mysql_master容器创建slave用户并赋予对应的权限便于复制

#进入容器
docker exec -it mysql_master /bin/bash
#进入mysql
mysql -u root -p
# 5.7 可以创建用户和授权都一起处理,但是8.0以上得分开写
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'Slave1'@'%' identified by  'Slave123456';
  1. 测试Slave1用户是否可以使用
SELECT
	  USER,
	  HOST,
	  account_locked,
	  password_expired 
FROM
	  mysql.USER;

在这里插入图片描述

在这里插入图片描述

部署mysql_salve(从)

  1. 运行slave容器并查看状态
docker run --platform linux/amd64 -p 3310:3306 --name mysql_slave \

-v /Users/miaomk/docker/volume/mysql/cluster/_slave/log:/var/log/mysql \

-v //Users/miaomk/docker/volume/mysql/cluster/_slave/data:/var/lib/mysql \

-v /Users/miaomk/docker/volume/mysql/cluster/_slave/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

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

  1. 配置mysql_salve挂载位置的my.cnf
[mysqld]

server_id=102

log-bin=master-mysql-slave.bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
#跳过主健重复
slave_skip_errors=1062
relay_log=master-mysql-relay-bin
#将复制事件写进自己的二进制日志
log_slave_updates=1
#replica 设置为只读(具有super权限的用户除外)
read_only=1
  1. 重启mysql_slave容器并进入mysql_master容器内部查看对应内容

docker restart mysql_slave

docker ps

#进入mysql_master容器内查询master内容
docker exec -it mysql_master /bin/bash

mysql -uroot -p

show master status;

在这里插入图片描述

FilePosition都是我们后面要在mysql_slave容器中需要用到的
  1. 查询本机的ip
ifconfig

在这里插入图片描述

  1. 进入mysql_slave容器内开启slave
docker exec -it mysql_slave /bin/bash

mysql -uroot -p

#设置master信息
CHANGE MASTER TO 
    master_host = '192.168.124.3',
    master_user = 'Slave1',
    master_password = 'Slave123456',
    master_port = 3309,
    master_log_file = 'mysql-master.000001',
    master_log_pos = 618,
    master_connect_retry = 30;

#查询slave状态
show slave status \G

#开启slave
start slave;

#开启slave后查看状态
show slave status \G

命令说明:

master_host:Master 的地址,看别人的文章里这里说的都是指的容器的独立 ip, 可以通过 docker inspect --format=‘{{.NetworkSettings.IPAddress}}’ 容器名称 | 容器 id 查询容器的 ip,但是我自己实验下来发现如果用这个host的话mysql_slave里的slave连不上master,看到一篇文章发现用的本机IP,实验后发现对我可行,大家可以参考一下

master_port:Master 的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是 60 秒

在这里插入图片描述

这样就代表上述的slave能连上master了

在这里插入图片描述

测试:在主库mysql_master中建库建表,插入数据,再去从库中查看,验证主从同步

最后:slave无法连接上master的踩坑分享

1.

在这里插入图片描述

FilePosition设置不对,需要重新去mysql_master里面 show master status;查看

2. error connect to master

  1. 网络不通 检查 ip, 端口(可能跟我一样是需要本机的ip,而不是容器的ip或者127.0.0.1或者localhsot

  2. 密码不对 检查是否创建用于同步的用户和用户密码是否正确

文章参考:https://blog.csdn.net/csdnfanguyinheng/article/details/123239722

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

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

相关文章

低价监测的必要性

当品牌线上数据变多时,监测工作就变得非常重要了,品牌的线上监测工作,一般是围绕价格进行的,监测价格有无低价,也是看渠道是否健康的一种体现,当品牌线上渠道存在很多低价链接时,品牌要及时的进…

得物一面,场景题问得有点多!

题目来源:https://www.nowcoder.com/discuss/525371909735792640 前文 本期是【捞捞面经】系列文章的第 1 期,持续更新中…。 《捞捞面经》系列正式开始连载啦,据说看了这个系列的朋友都拿到了大厂offer~ 欢迎星标订阅,持续更新…

数据艺术:精通数据可视化的关键步骤

数据可视化是将复杂数据转化为易于理解的图表和图形的过程,帮助我们发现趋势、关联和模式。同时数据可视化也是数字孪生的基础,本文小编带大家用最简单的话语为大家讲解怎么制作一个数据可视化大屏,接下来跟随小编的思路走起来~ 1.数据收集和…

电商API数据共享(淘宝拼多多京东1688阿里巴巴国际站Lazada)

国内外主流电商平台二十多个,商品数据订单数据买家卖家数据齐全,支持高并发请求 测试API列表 获取api_key&secret 阿里巴巴国际站商品详情数据 "item": {"num_iid": "60840463360","title": "Slip-o…

v-if v-else v-else-if 例子

v-if v-else v-else-if 例子 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

便携式水质自动采样器可应用的场景

便携式水质自动采样器符合中国环境保护部HJ/T 372-2007《水质自动采样器技术要求及检测方法》&#xff0c;是集流量测量、水样采集&#xff0c;自动分瓶、一体的多功能环境监测仪器。 具有体积小&#xff0c;方便移动、操作简捷、环保节能等特点。适用于各级环境监测站、监察机…

nacos的简单使用

配置中心 服务中心 创建用户管理资源 逻辑图 创建用户 创建角色绑定用户 角色下配置资源 文字解释用户、角色、资源的关系 用户和角色是多对多的关系、角色和资源是多对多的关系。作者画图只是单纯画一个用户的

JDBC使用了哪种设计模式

JDK中提供了操作数据库的接口&#xff0c;比如 java.sql.Driver java.sql.Connection java.sql.Statement java.sql.PreparedStatement 不同的数据库厂商提供操作自己数据库的驱动包&#xff0c; 比如mysql public class Driver extends NonRegisteringDriver implements jav…

C++二叉搜索树

C二叉搜索树 二叉搜索树概念二叉搜索树操作结点类的实现中序遍历实现二叉搜索树的插入非递归实现递归实现 二叉搜索树的查找非递归实现递归实现 二叉搜索树的删除非递归实现递归实现 构造函数拷贝构造函数析构函数赋值运算符重载 二叉搜索树的应用二叉搜索树的性能分析 二叉搜索…

MySQL 日志系统

重要日志模块 日志文件bin logredo log**关于循环写入和擦除的checkpoint 规则**redo log 怎么刷入磁盘的 binlog 和 redo log 有什么区别&#xff1f;undo log 日志文件 错误日志&#xff08;error log&#xff09;&#xff1a; 错误日志文件对 MySQL 的启动、运行、关闭过程进…

【STM32】AFIO 以及重映射

在配置外部中断的时候&#xff0c;打开GPIO时钟的时候&#xff0c;也同时打开了AFIO的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE); AFIO 简单来说 MCU有对外管脚&#xff0c;包括CPU的管脚和内置外设&#xff08;PWM,TIM,ADC……&…

非计算机科班如何丝滑转码?(本人就是有点不丝滑)

我觉得无非三个办法可以选择(当然可能有其他方法) 自学 报班 有师傅带 但是在学习之前&#xff0c;你一定要明确你学习编程的目的是什么&#xff01; 游戏开发&#xff1f;后台研发&#xff1f;爬虫工程师&#xff1f;前端程序员?数据分析师&#xff1f; 或者 仅仅是想做一…

基于Spring Boot 的 Ext JS 应用框架之coworkee

Ext JS 官方提供了一个人员管理的完整应用框架 - coworkee。该框架的显示如下: 该框架的布局特点如下: 布局方式: 左右布局, 左侧导航栏默认收合特点:左侧导航区占用空间小, 工作区较大, 适合没有二级导航栏,工作区需要显示的内容较多的系统。如果导航栏是横向底部,就…

单值二叉树

目录 题目题目要求示例 解答方法一、实现思路时间复杂度和空间复杂度代码 方法二、实现思路时间复杂度和空间复杂度代码 题目 单值二叉树 题目要求 题目链接 示例 解答 方法一、 递归 实现思路 时间复杂度和空间复杂度 时间复杂度&#xff1a;O(N) 空间复杂度&#xf…

layui--记录

layui 行点击事件&#xff1a;点了没反应&#xff1f; //监听行工具事件layui.table.on(tool(demo), function (obj) {//alert(222) });原因&#xff1a;检查下id与lay-filter是否一致&#xff1b;id与lay-filter必须一致。 <table id"demo" lay-filter"dem…

适配器设计模式

目录 一、适配器模式1.类适配器模式2.对象适配器模式3.接口适配器 二、适配器模式应用场景三、适配器模式的优缺点 一、适配器模式 B站&#xff1a;java架构师 定义&#xff1a;适配器模式把一个类的接口变换成客户端所期待的另一种接口&#xff0c;从而使原本因接口不匹配而…

idea 打 jar 包以及运行使用

1. 在 idea 右侧点击 maven 2. 点击Lifecycle——》clean 运行 3. 点击 Lifecycle——》compile 4. 点击 Lifecycle——》package 5. 打成的 jar 包可以在 target中找到 6. jar 包的名字和版本可以在 pom.xml文件中设置 7. 注意事项&#xff1a;打 jar 包的时候 test 里的 tes…

【算法刷题-双指针篇】

目录 1.leetcode-27. 移除元素2.leetcode-344. 反转字符串3.leetcode-剑指 Offer 05. 替换空格4.leetcode-206. 反转链表5.leetcode-19. 删除链表的倒数第 N 个结点6.leetcode-面试题 02.07. 链表相交7.leetcode-142. 环形链表 II8.leetcode-15. 三数之和9.leetcode-18. 四数之…

PROFINET简介及其实现

PROFINET是一个开放式的工业以太网通讯协定&#xff0c;主要由西门子公司和PROFIBUS & PROFINET国际协会所提出。PROFINET应用TCP/IP及资讯科技的相关标准&#xff0c;是实时的工业以太网。自2003年起&#xff0c;PROFINET是IEC 61158及IEC 61784标准中的一部分。 三种通信…

Aspose导出word使用记录

背景&#xff1a;Aspose系列的控件&#xff0c;功能实现都比较强大&#xff0c;可以实现多样化的报表设计及输出。 通过这次业务机会&#xff0c;锂宝碳审核中业务功需要实现Word文档表格的动态导出功能&#xff0c;因此学习了相关内容&#xff0c;在学习和参考了官方API文档的…