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

0101docker mysql8镜像主从复制-运维-mysql

1 概述

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

Mysql支持一台主库同时向多台从库进行复制,从库同时可以作为其他从服务器的主库,实现链状复制。

Mysql复制的优点主要包含以下三个方面:

  1. 主库出现问题,可以快速切换到从库提供服务;
  2. 实现读写分离,降低主库的访问压力;
  3. 可以在从库执行备份,以避免备份期间影响主库服务。

2 原理

在这里插入图片描述

主从复制,主要步骤如下:

  1. Master主库在事务提交时,会把变更记录在二进制日志文件Binlog中;
  2. 从库读取主库的二进制日志文件Binlog,吸入从库的中继日志Relay Log;
  3. Slave重做中继日志中的操作,将改变反应到自己的数据库中。

3 搭建

3.1 准备

我这里是通过docker镜像来搭建mysql主从服务,基础环境如下表所示:

软件版本描述
docker desktop4.21.1docker容器桌面版
msyql:latestoraclelinux/mysql-community-server-minimal 8.0.33mysql镜像

3.2 启动容器

启动 Master和Slave容器

docker run -it -p 3309:3306 --name mysql8-master --privileged=true \
-v /Users/gaogzhen/data/docker/mysql/mysql8/node-master/conf/conf.d:/etc/mysql/conf.d \
-v /Users/gaogzhen/data/docker/mysql/mysql8/node-master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker run -it -p 3340:3306 --name mysql8-slave --privileged=true \
-v /Users/gaogzhen/data/docker/mysql/mysql8/node-slave/conf/conf.d:/etc/mysql/conf.d \
-v /Users/gaogzhen/data/docker/mysql/mysql8/node-slave/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql

使用docker desktop的话可以简单配置,不挂载配置和数据目录,直接同UI窗口修改;在linux服务器环境,建议挂载配置和数据目录,方便查看和修改。

3.3 修改配置文件

3.3.1 Master配置

  • 修改Master配置

不挂载直接进入容器修改式:

  • docker exec -it mysql8-master bash

  • cd /etc

  • vim my.cnf

    • 这个时候会报错 bash: vi: command not found,需要安装vim
    • apt-get install vim
    • apt-get update
    • apt-get install vim
    • 在my.cnf中添加如下配置
    [mysqld]
    ## 同一局域网内注意要唯一
    server-id=100  
    ## 开启二进制日志功能,可以随便取(关键)
    log-bin=mysql-bin
    
  • 配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启。重启mysql服务时会使得docker容器停止,我们还需要docker start master启动容器。

  • Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

  • docker exec -it mysql8-master bash 进入到master容器中

  • mysql -u root -p

  • 输入密码

  • CREATE USER ‘slave’@‘%’ IDENTIFIED BY ‘123456’;

  • GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘slave’@‘%’;

这里我们通过修改挂载的配置目录,在conf.d下面新创建一个配置文件的方式来修改,不去修改my.cnf文件。

vim master.cnf
[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

创建mysql用户和授权,可以直接本地执行如下命令

mysql -h127.0.0.1 -P3309 -uroot -p

3.3.2 Slave配置

步骤同上面相同,配置如下

[mysqld]## 设置server_id,注意要唯一server-id=101  ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用log-bin=mysql-slave-bin   ## relay_log配置中继日志relay_log=edu-mysql-relay-bin  

配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启。重启mysql服务时会使得docker容器停止,我们还需要docker start slave启动容器。

3.4 查看Master信息

  • 进入到mysql,mysql -u root -p
  • show master status;
  • 记录File(mysql-bin.000001), Position(157)

3.5 查看Master和Slave容器IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql8-master 
172.17.0.2
gaogzhen@gaogzhendeMacBook-Pro conf.d % 
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql8-slave 
172.17.0.3

3.6 配置Slave与Master关联

进入Slave从库容器

  • 进入mysql,mysql -u root -p
  • change master to master_host=‘172.17.0.2’, master_user=‘slave’, master_password=‘123456’, master_port=3306, master_log_file=‘mysql-bin.000001’, master_log_pos= 157, master_connect_retry=30;
  • 字段说明
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

3.7 Slave开启主从复制

  • 在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态

    在这里插入图片描述

  • SlaveIORunning 和 SlaveSQLRunning 都是No

  • start slave开启主从复制

  • 再次查询主从同步状态show slave status \G;

    在这里插入图片描述

    报错了

        Last_IO_Error: Error connecting to source 'slave@172.17.0.2:3306'. This was attempt 1/86400, with a delay of 30 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.Last_SQL_Errno: 0
    

    解决方案在后面

    3.8 主从复制测试

    • 在master创建一个test数据库,在slave中也会生成一个test数据库。

    测试过程如下图所示:

    在这里插入图片描述

4 常见错误

4.1 Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.

在Master库做如下修改

ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

修改用户加密方式使用mysql_native_password

4.2 Master修改之后重新设置Slave

在修改了Master库之后,未重新设置关联配置

-- Master库
show master status;
-- Slave 库
stop slave;
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 440, master_connect_retry=30;
start slave;

如下图所示,状态正常

在这里插入图片描述

结语

如果小伙伴什么问题或者指教,欢迎交流。

❓QQ:806797785

参考链接:

[1]MySQL数据库视频[CP/OL].2020-04-16.p158-162.

[2]mysql官网使用配置文件文档[CP/OL].

[3]基于docker搭建的mysql主从复制[CP/OL].

[4]Authentication plugin ‘caching_sha2_password’ cannot be loaded[CP/OL].

相关文章:

0101docker mysql8镜像主从复制-运维-mysql

1 概述 主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。 Mysql支持一台主库同时向多台从库进行复制,从库同时可以…...

uC-OS2 V2.93 STM32L476 移植:系统启动篇

前言 前两篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG 的 STM32L476RG 的 裸机工程,下载了 uC-OS2 V2.93 的源码,并把 uC-OS2 的源文件加入 Keil MDK5 工程 本篇适配 uC-OS2 的 系统定时器(Systick)与 PendSV_Handler&#xf…...

redis 集群 1:李代桃僵 —— Sentinel

目前我们讲的 Redis 还只是主从方案,最终一致性。读者们可思考过,如果主节点凌晨 3 点突发宕机怎么办?就坐等运维从床上爬起来,然后手工进行从主切换,再通知所有的程序把地址统统改一遍重新上线么?毫无疑问…...

重置 Macbook 中MySQL 的 root 用户密码

Mac上好久前安装测试用的MySQL的Root密码忘记,猜了些常用密码都不对,只能重置密码。 重置密码 1、关闭MySQL服务,可以直接在系统偏好里关闭 sudo /usr/local/mysql/support-files/mysql.server stop 2、进入安装目录,启动安全…...

2308C++搞笑的概念化

前一篇的概念化,太搞笑 元<类 T>概念 可画要求(T&t,整 i){t.画(i);}; 构 方形{空 画(整 i){打印(2*i);} };元<可画 T>空 f(T&t,整 i){t.画(i);t.画(i); }空 主(){方形 e;f(e,33); }用得着那么复杂吗?...

修改node_modules里的源码

最近在工作中使用到一款生成二维码的依赖&#xff08;以vue项目为例讲解&#xff09;&#xff1a;vue-qr&#xff0c;安装的4.0.9版本的&#xff0c;在启动工程的时候报错&#xff1a; You may need an appropriate loader to handle this file type后我查阅各种资料发现 1&a…...

【每日一题Day287】LC24 两两交换链表中的节点 | 模拟 递归

两两交换链表中的节点【LC24】 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 周赛暂停一周啦 思路&#xff1a;模拟 记录前驱…...

Java ~ Collection/Executor ~ PriorityBlockingQueue【源码】

前言 相关系列 《Java ~ Collection【目录】》&#xff08;持续更新&#xff09;《Java ~ Executor【目录】》&#xff08;持续更新&#xff09;《Java ~ Collection/Executor ~ PriorityBlockingQueue【源码】》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;…...

Java后台生成微信小程序码并以流的形式返回给前端

后端代码 获取access_token import net.sf.json.JSONObject;public class WeChatUtil {/*** 获取token*/private static String ACCESSTOKENURL "https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appid{appId}&secret{appSecret}"…...

AtcoderABC226场

A - Round decimalsA - Round decimals 题目大意 给定一个实数X&#xff0c;它最多可以使用三位小数表示&#xff0c;而且X的小数点后有三位小数。将X四舍五入到最接近的整数并打印结果。 思路分析 可以使用round函数进行四舍五入 知识点 round(x) 是一个用来对数字进行四…...

Linux知识点 -- VS Code远程连接服务器协助开发

Linux知识点 – VS Code远程连接服务器协助开发 文章目录 Linux知识点 -- VS Code远程连接服务器协助开发一、VS Code的使用1.使用VS Code进行C语言编译与运行2.使用VS Code进行C代码的编译与运行 二、使用VS Code连接云服务器三、使用VS Code进行GDB调试 一、VS Code的使用 1…...

blender基础认识(选项开关、工具栏、视图等)

文章目录 引言一、大纲选项开关和保存启动文件1. 大纲选项1. 禁用选中2. 视图影藏3. 视图禁用4. 渲染禁用 2. 保存启动文件 二、工具栏和侧边栏1. 左侧工具栏2. 右侧工具栏 三、视图1. 视角2. 缩放3. 拖拽4. 摄像机视角5. 切换正交视图6. 局部视图7. 显示隐藏 四、添加删除物体…...

React Hooks 中的属性详解

React Hooks 是 React 16.8 版本中新增的特性&#xff0c;允许我们在不编写 class 的情况下使用 state 和其他的 React 特性。Hooks 是一种可以让你在函数组件中“钩入” React 特性的函数。以下是一些常用的 React Hooks&#xff0c;并附有详细的用法和代码示例。 1. useStat…...

工作遇到问题与解决办法(一)

一、构建父子工程 父 <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.8.5</version> <modules><module>ruoyi-admin</module><module>ruoyi-framework</module><module>…...

综合与新综合与新型交通发展趋势[75页PPT]

导读&#xff1a;原文《综合与新综合与新型交通发展趋势[75页PPT]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需…...

【树形DP+换根思想】2022牛客多校加赛 H

登录—专业IT笔试面试备考平台_牛客网 题意&#xff1a; 思路&#xff1a; 这个虽然是树形DP&#xff0c;却用了换根的思想.... 首先&#xff0c;后缀0的个数可以转化成min(cnt2,cnt5)&#xff0c;其中cnt2为2的因子个数&#xff0c;cnt5为5的因子个数 然后进行DP 设dp[u]…...

Gitlab CI/CD笔记-第二天-GitOps的流水线常用关键词(1)

一、常用关键词 在Gitlab项目的根目录需要创建一个 .gitlab-ci.yaml的文件。 这个文件就是定义的流水线。Call :"Pipeline as code" 二、这条流水线怎么写&#xff1f; 一、掌握常用的关键词即可。 1.关键词分类 1.全局关键词 Global Keywards 2.任务关键词…...

Spring Boot3.0(一):入门篇

什么是 Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。 用我的话来理解&#xff0c;就是 Spring…...

各种排序333

冒泡排序 n方 public static void BubbleSort(int[] arr) {int n = arr.Length;for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - i - 1; j++){if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}} }选择排序 n方 publ…...

[C++] 类与对象(中)完整讲述运算符重载示例 -- 日期类(Date) -- const成员

目录 1、前言 2、全缺省的构造函数 3、打印接口 4、拷贝构造 5、赋值运算符重载&#xff08;operator&#xff09; 5.1赋值重载是默认成员函数&#xff0c;重载格式&#xff1a; 5.2 赋值重载不能为全局函数 5.3 编译器默认生成 6、析构函数 7、operator> 8、ope…...

Pearcleaner:macOS应用彻底清理的终极免费解决方案

Pearcleaner&#xff1a;macOS应用彻底清理的终极免费解决方案 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾经遇到过这样的烦恼&#xff1a;在Ma…...

别再手动复制了!用Python+Wind API批量下载股票、期货、债券代码的完整脚本

金融数据自动化采集实战&#xff1a;PythonWind API全市场证券代码批量获取指南 金融数据是量化研究和投资决策的基础&#xff0c;但手动从Wind客户端导出各类证券代码不仅耗时耗力&#xff0c;还容易出错。本文将手把手教你用Python调用Wind API实现股票、期货、债券、期权等全…...

【免费下载】 探索SFP模块的奥秘:SFP-I2C工具推荐

探索SFP模块的奥秘&#xff1a;SFP-I2C工具推荐 项目介绍 在现代网络通信中&#xff0c;SFP&#xff08;Small Form-factor Pluggable&#xff09;模块扮演着至关重要的角色。这些模块通过I2C接口提供了丰富的信息&#xff0c;包括制造商、功能支持以及诊断数据等。然而&#x…...

终极指南:5个简单步骤让魔兽争霸3在现代电脑上完美运行

终极指南&#xff1a;5个简单步骤让魔兽争霸3在现代电脑上完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为魔兽争霸…...

从抖动(Jitter)与往返时间(RTT)出发:构建实时音视频通信的网络质量评估体系

1. 实时音视频通信的网络质量挑战 当你参加视频会议时突然画面卡成PPT&#xff0c;或者直播连麦时对方声音忽大忽小&#xff0c;这些糟糕体验的背后往往是网络质量问题在作祟。实时音视频通信对网络环境极为敏感&#xff0c;就像在钢丝上骑自行车——任何微小的颠簸都可能导致严…...

避坑指南:STM32CubeMX配置高级定时器PWM时,时钟源、ARR重载和DMA传输的那些坑

STM32高级定时器PWM配置实战&#xff1a;从时钟陷阱到DMA优化的深度解析 引言 深夜的实验室里&#xff0c;示波器上跳动的波形总是不尽如人意——这可能是许多嵌入式开发者使用STM32高级定时器输出PWM时的共同经历。不同于基础定时器&#xff0c;高级定时器&#xff08;如TIM1/…...

别再凭感觉选电感了!深入拆解Bulk电路中电感与电容的选型计算(以12V转5V为例)

别再凭感觉选电感了&#xff01;深入拆解Bulk电路中电感与电容的选型计算&#xff08;以12V转5V为例&#xff09; 在电源设计领域&#xff0c;Bulk电路&#xff08;又称Buck电路&#xff09;作为最常见的降压型DC-DC转换拓扑&#xff0c;其性能优劣直接决定了整个系统的稳定性和…...

手把手教你用ADS 2023设计433MHz低噪放大器(从DC分析到S参数,保姆级避坑指南)

从零开始用ADS 2023打造433MHz低噪声放大器&#xff1a;原理剖析与实战避坑指南 在物联网和无线通信设备爆发式增长的今天&#xff0c;433MHz频段因其良好的穿透性和适中的传输距离&#xff0c;成为智能家居、远程控制等场景的首选。而作为接收机前端的关键部件&#xff0c;低噪…...

西安给孩子配镜哪个公司口碑好

如果在西安想给孩子配镜&#xff0c;甲目眼镜&#xff08;成都&#xff09;有限公司是个不错的选择。甲目眼镜聚焦中高端写字楼白领与商务人群&#xff0c;同时也为孩子配镜提供优质服务。它以“高性价比的高端眼镜”为使命&#xff0c;严选国内外一线品牌&#xff0c;重塑了品…...

第一卷第4章:接口而非实现编程

第一卷第4章:接口而非实现编程 目录介绍 00.先回答上篇思考题 0.1 上篇遗留三道题 0.2 云迁移6万行代码 0.3 五次反转补锅 0.4 灵魂五连问 01.从一个搬迁切入 1.1 上云搬迁案例...