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].

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

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

相关文章

ubuntu调整路由顺序

Ubuntu系统跳转路由顺序 1、安装ifmetric sudo apt install ifmetric2、查看路由 route -n3、把Iface下面的eth1调到第一位 sudo ifmetric eth1 0命令中eth1是网卡的名称,更改网卡eth1的跃点数(metric值)为0(数值越小&#xf…

读发布!设计与部署稳定的分布式系统(第2版)笔记29_控制层下

1. 配置服务 1.1. 配置服务本身就是分布式数据库 1.1.1. 像ZooKeeper和etcd这样的配置服务 1.1.2. 受CAP定理和亚光速通信的限制 1.1.3. 可实现容量扩展,但不具备资源可伸缩性 1.1.4. 也会遭受相同的网络创伤 1.2. 信息并不仅仅从服务流向客户端实例&#xff…

mysql统计近7天数据量,,按时间戳分组

可以使用以下 SQL 语句来统计近7天的数据量,并按时间戳分组。如果某一天没有数据,则将其填充为0。 SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp), %Y-%m-%d) AS date,COUNT(*) AS count FROM table_name WHERE timestamp > UNIX_TIMESTAMP(DATE_SUB…

python调用pytorch的clip模型时报错

使用python调用pytorch中的clip模型时报错:AttributeError: partially initialized module ‘clip’ has no attribute ‘load’ (most likely due to a circular import) 目录 现象解决方案一、查看项目中是否有为clip名的文件二、查看clip是否安装成功 现象 clip…

乍得ECTN(BESC)申请流程

根据TCHAD/CHAD乍得法令,自2013年4月1日起,所有运至乍得的货物都必须申请ECTN(BESC)电子货物跟踪单。如果没有申请,将被视为触犯乍得的条例,并在目的地受到严厉惩罚。ECTN是英语ELECTRONIC CARGO TRACKING NOTE的简称;…

基于Java+SpringBoot+Vue的人事管理系统设计与实现(源码+LW+部署文档等)

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Ubuntu 传输文件方法

Ubuntu 传输文件方法 文章目录 Ubuntu 传输文件方法1 scpusage跨越跳板机传输 2 rsync(remote sync)特性installusage本地拷贝同步将文件从远程机器复制到本地机器将文件从本地机器复制到远程机器通过ssh使用rsync 3 SSHFSusage通过 SSHFS 从远程系统访问…

深挖 Threads App 帖子布局,我进一步加深了对CSS网格布局的理解

当我遇到一个新产品时,我首先想到的是他们如何实现CSS。当我遇到Meta的Threads时也不例外。我很快就探索了移动应用程序,并注意到我可以在网页上预览公共帖子。 这为我提供了一个深入挖掘的机会。我发现了一些有趣的发现,我将在本文中讨论。 …

使用node.js 搭建一个简单的HelloWorld Web项目

文档结构 config.ini #将本文件放置于natapp同级目录 程序将读取 [default] 段 #在命令行参数模式如 natapp -authtokenxxx 等相同参数将会覆盖掉此配置 #命令行参数 -config 可以指定任意config.ini文件 [default] authtokencc83c08d73357802 #对应一条隧…

LeetCode 周赛上分之旅 # 37 多源 BFS 与连通性问题

⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度…

python高阶技巧

目录 设计模式 单例模式 具体用法 工厂模式 优点 闭包 案例 修改闭包外部变量 闭包优缺点 装饰器 装饰器原理 装饰器写法 递归 递归的调用过程 递归的优缺点 用递归计算阶乘 设计模式 含义:设计模式是一种编程套路,通过这种编程套路可…

AQL品质抽样标准

AQL抽样标准 - 百度文库 Acceptance Quality Limit 接收质量限的缩写,即当一个连续系列批被提交验收时,可允许的最差过程平均质量水平。 AQL普遍应用于各行业产品的质量检验,不同的AQL标准应用于不同物质的检验上。在AQL 抽样时,…

【开源三方库】Aki:一行代码极简体验JSC++跨语言交互

开源项目 OpenHarmony 是每个人的 OpenHarmony 一、简介 OpenAtom OpenHarmony(以下简称“OpenHarmony”)的前端开发语言是ArkTS,在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性&#x…

SpringBoot开发环境热部署

目录 开发热部署 添加dev-tools依赖 在application.properties中配置devtools 在IDEA中添加设置 开发热部署 在实际的项目开发调试过程中会频繁地修改后台类文件,导致需要重新编译、 重新启动,整个过程非常麻烦,影响开发…

STM32 低功耗-待机模式

STM32 待机模式 文章目录 STM32 待机模式第1章 低功耗模式简介第2章 待机模式简介2.1 进入待机模式2.1 退出待机模式 第3章 待机模式代码部分总结 第1章 低功耗模式简介 在 STM32 的正常工作中,具有四种工作模式:运行、睡眠、停止和待机模式。 在系统或…

【Spring Cloud 六】Hystrix熔断

这里写目录标题 系列文章目录背景一、Hystrix是什么服务雪崩服务容错的相关概念熔断器降级超时控制限流 二、会什么要有Hystrix三、如何使用Hystrix进行熔断处理整体项目代码服务提供者pom文件yml配置文件启动类controller 服务消费者pom文件yml配置文件启动类feignhystrixcont…

信息安全技术工业控制系统安全控制应用指南学习笔记

工业控制系统安全控制基线 根据工业控制系统在国家安全、经济建设、社会生活中的重要程度,遭到破坏后对国家安全、社会秩序、公共利益以及公民、法人和其他组织的合法权益的危害程度等,结合信息安全等级保护标准划分及实施效果分析,结合工业…

前端主题切换方案——CSS变量

前言 主题切换是前端开发中老生常谈的问题,本文将介绍主流的前端主题切换实现方案——CSS变量 CSS变量 简介 编写CSS样式时,为了避免代码冗余,降低维护成本,一些CSS预编译工具(Sass/Less/Stylus)等都支…

JVM面试题

JVM理论 #JVM内存模型# Java内存模型(JMM)? Java的内存模型决定了线程间的通信方式,JMM的模型是由主存和工作内存构成,两个线程想要正常通信需要将工作内存中的变量刷到主存中,另一个线程才能正确读取得…

【数据结构】移除链表元素-图文解析(单链表OJ题)

LeetCode链接:203. 移除链表元素 - 力扣(LeetCode) 本文导航 💭做题思路 🎨画图更好理解: ✍️代码实现 🗂️分情况讨论: ❄️极端情况: 💭做题思路 遍历链表…