Docker 实现MySQL 主从复制

一、拉取镜像

docker pull mysql:5.7

相关命令:

  • 查看镜像:docker images

二、启动镜像

启动mysql01、02容器:

docker run -d -p 3310:3306 -v /root/mysql/node-1/config:/etc/mysql/ -v /root/mysql/node-1/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456  --name mysql01 mysql:5.7
docker run -d -p 3311:3306 -v /root/mysql/node-2/config:/etc/mysql/ -v /root/mysql/node-2/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456  --name mysql02 mysql:5.7

命令解释:

  • -d: 后台运行容器,并返回容器ID
  • -p 宿主机端口:容器端口 :将容器的端口映射到宿主机端口
  • -e MYSQL_ROOT_PASSWORD=123456 :配置数据库连接密码
  • -v 宿主机路径:容器内路径 :将配置文件夹挂载到宿主机
  • –name 容器名字:将容器命名为 mysql01(02)

docker ps -a #查看全部容器(运行中加未运行的)


都已正常启动。

三、连接测试

搭建过程中,为了减少错误的产生,就多了这一步的测试。

我们可以直接拿Navicat来进行连接测试。

注意事项: 记得打开安全组,虚拟机的话记得处理好防火墙。(另外我这里是3310,可根据自己需要更改端口)

测试启动成功后,我们再来进行下一步。

四、编写主从复制配置文件

之前我们启动的时候写了这句-v /root/mysql/node-1/config:/etc/mysql/,将mysql 的配置文件夹和宿主机的文件夹挂载起来的。

那么我们就可以直接在宿主机下的/root/mysql/node-1/config/编写配置文件了。

4.1、编写主机配置文件

vim my.cnf

[mysqld]#修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 需要复制的主数据库名字
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT

退出方式

先按Esc键–>再按Shift+:键–>输入wq–保存退出。

4.2、编写从机配置文件

从机上的my.cnf也是同样的方式

[mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

重新启动mysql容器

docker restart mysql01  mysql02	

在这里插入图片描述

docker ps -a #查看容器

在这里插入图片描述

接下来就是搭建主从复制了。

五、搭建主从复制

5.1、主机设置

docker exec -it mysql01 /bin/bash #进入容器
mysql -uroot -p123456 #连接mysql

5.2、主机上建立帐户并授权 slave

给从机授权,为了让从机能够和主机连接起来。

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

5.3、查询master状态

show master status; #查询master的状态

在这里插入图片描述

把这里的File和Position记下来哈,等下在从机上要用到。

File: mysql-bin.000001
Position: 438

Binlog_Do_DB:需要复制的数据库。
Binlog_Ignore_DB:不需要复制的数据库。

注意:此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化

5.4、从机设置

进入mysql02容器

docker exec -it mysql02 /bin/bash 
mysql -uroot -p123456

复制主机的命令

CHANGE MASTER TO MASTER_HOST='主机的ip地址',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=438;#解释:# 	CHANGE MASTER TO MASTER_HOST='172.16.0.3',#	MASTER_USER='slave'(刚刚配置的用户名),#	MASTER_PASSWORD='123456'(刚刚授权的密码),#	master_port=主机开放的端口 我这里是3310端口,#	MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值(之前的Position);

在这里插入图片描述

注意事项:如果在这里出现错误,先重置。执行完下面两条命令。

stop slave;
reset master;

启动从服务器复制功能

start slave;

查看从服务器状态

show slave status\G;

在这里插入图片描述
#下面两个参数都是Yes,则说明主从配置成功!

Slave_IO_Running: Yes 
Slave_SQL_Running: Yes

六、测试主从复制

6.1、主机新建库 -从机复制


在主机新建testdb后,从机也随之就有了。(这里的命名是确定的,因为在配置文件中说明了复制testdb数据库)。

6.1、新建表-从机复制

6.3、insert 记录-从机复制

当然这些还是有看不出到底有没有复制的话,咱们直接测试函数,就能知道啦。

insert into my_table01(id,name) VALUE(1,@@hostname);

这就可以看出主从复制确实是成功的,但是在使用函数上有数据不一致的问题。

七、重置配置主从

如何停止从服务复制功能

stop slave; 

如何重新配置主从 (即清除之前的主从配置)

stop slave;
reset master;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

day03_开发前准备和匹配类标签

文章目录 day03_开发前准备和匹配类标签一、标签体系(了解)二、数据导入(操作)1、背景介绍(重要)2、创建Hive表2.1 dwm_sold_goods_sold_dtl_i2.2 dwm_sell_o2o_order_i**2.3 dwd_mem_member_union_i**2.4 dwm_mem_member_behavior_day_i**2.5 dwm_mem_first_buy_i**3、数…

Video-RAG:一种将视频RAG新框架

1. 摘要及主要贡献点 摘要: 检索增强生成(RAG)是一种强大的策略,通过检索与查询相关的外部知识并将其整合到生成过程中,以解决基础模型生成事实性错误输出的问题。然而,现有的RAG方法主要集中于文本信息&…

VSCode的配置与使用(C/C++)

从0开始教你在vscode调试一个C文件 一.首先是配置你的编译环境,添加到环境变量(默认你是全新的电脑,没有安装vs2019之类的) 原因:因为相比于vs2019,vscode只是个代码编辑器,相当于一个彩色的、…

MongoDB基本操作

一、实验目的 1. 熟悉MongoDB的基本操作,包括CRUD(增加、读取、更新、删除)。 2. 理解MongoDB的文档型数据库特性和Shell的使用。 3. 培养学生通过命令行操作数据库的能力。 4. 强化数据库操作的实际应用能力。 二、实验环境准备 1.…

python如何导出数据到excel文件

python导出数据到excel文件的方法: 1、调用Workbook()对象中的add_sheet()方法 wb xlwt.Workbook() ws wb.add_sheet(A Test Sheet) 2、通过add_sheet()方法中的write()函数将数据写入到excel中,然后使用save()函数保存excel文件 ws.write(0, 0, 1234…

STL--list(双向链表)

目录 一、list 对象创建 1、默认构造函数 2、初始化列表 3、迭代器 4、全0初始化 5、全值初始化 6、拷贝构造函数 二、list 赋值操作 1、赋值 2、assign(迭代器1,迭代器2) 3、assign(初始化列表) 4、assig…

eBPF 概述 | 学习

注:本文为 “ eBPF” 相关文章合辑。 未整理去重。 如有内容异常,请看原文。 【译】eBPF 概述:第 1 部分:介绍 2022-04-26257 1. 前言 深入研究 eBPF 的底层细节,从其虚拟机机制和工具,到在远程资源受限…

STM32学习之通用定时器

1.1通用定时器介绍 通用定时器具有基本定时器的所有特征,基本定时器只能递增计数,而通用定时器可以递减计数,可以中心对齐计数;也可以触发ADC和DAC,同时在更新事件,触发事件,输入捕获&#xff…

【Spring】定义的Bean缺少隐式依赖

问题描述 初学 Spring 时,我们往往不能快速转化思维。例如,在程序开发过程中,有时候,一方面我们把一个类定义成 Bean,同时又觉得这个 Bean 的定义除了加了一些 Spring 注解外,并没有什么不同。所以在后续使…

服务器日志自动上传到阿里云OSS备份

背景 公司服务器磁盘空间有限,只能存近15天日志,但是有时需要查看几个月前的日志,需要将服务器日志定时备份到某个地方,需要查询的时候有地方可查。 针对这个问题,想到3个解决方法: 1、买一个配置比较低…

使用 vllm 部署 MiniCPM-o 2.6

使用 vllm 部署MiniCPM-o 2.6 1. 创建虚拟环境2. 克隆代码3. 从代码安装 vllm4. 安装 flash-attn5. 启动 MiniCPM-o 2.66. 使用 chatbox 客户端访问并测试一下 1. 创建虚拟环境 conda create -n vllm_openbmb python3.11 -y conda activate vllm_openbmb 2. 克隆代码 git clo…

JavaScript笔记基础篇04——对象

黑马程序员视频地址:黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes 目录 对象 对象的基本使用 1.对象声明语法 2.对象…

Autosar CP RTE规范解读之不同 BSW 接口的通知与软件组件激活机制:标准化接口与 AUTOSAR 接口的实现方式

在汽车电子系统开发中,特别是在遵循 AUTOSAR 架构的系统中,基本软件(BSW)模块之间的通信和信息通知机制至关重要,它直接影响着系统的性能、可靠性以及各个软件组件之间的协同工作能力。本文根据不同类型的 BSW 接口&am…

利用大语言模型进行长文本抽取式摘要的突破

论文地址:https://arxiv.org/pdf/2408.15801v1 引言:信息过载时代的文本摘要需求 在信息爆炸的时代,如何从海量文本中快速提取关键信息成为了一项至关重要的技能。自动文本摘要技术应运而生,主要分为抽取式和生成式两种方法。生成…

Quick get started with vcpkg, windows visual studio | CPP

本文属于 C 系列文章,本篇文章,是在 Quickstart C with cmake, visualstudio | CPP 基础上,继续的。 目录 vcpkg总结安装安装 mingw64安装 vcpkg 创建项目查询已有的包在 Visual Studio 中调试发布依赖Trouble ShootingCMake Error: CMake wa…

《Linux服务与安全管理》| 邮件服务器安装和配置

《Linux服务与安全管理》| 邮件服务器安装和配置 目录 《Linux服务与安全管理》| 邮件服务器安装和配置 1.在Server01上安装dns、postfix、dovecot和telnet,并启动 2.在Server01上配置DNS服务器,设置MX资源记录 3.在server1上…

BGP分解实验·9——路由聚合与条件性通告(1)

路由聚合是有效控制缩减BGP路由表的方法之一,路由聚合的前提和IGP一样,需要有路由目标存在BGP表中,与IGP不同的是,BGP路由聚合可以定义按需抑制路由的能力。 实验拓扑如下所示: 现在开始把从R1的R5的基础配置先准备好…

Spring Boot 配置(官网文档解读)

目录 摘要 Spring Boot 配置加载顺序 配置文件加载顺序 Spring Boot 配置加载方式 Value Value 注解简单示例 ConfigurationProperties 启动 ConfigurationProperties ConfigurationProperties 验证 ConfigurationProperties 与 Value 对比 Autowired Autowired 自…

ElasticSearch JavaRestClient查询之快速入门

文章目录 查询操作流程概述构建并发起请求1. 创建请求对象2. 设置请求体3. 发送请求 查询结果的解析1. 解析结果结构2. 获取总条数3. 获取命中的数据 完整示例代码总结 查询操作流程概述 Elasticsearch 查询操作大致可以分为两个部分: 构建并发起请求:…

【C++】红黑树的应用(封装map和set)

✨ 青山一道同云雨,明月何曾是两乡 🌏 📃个人主页:island1314 🔥个人专栏:C学习 🚀 欢迎关注:👍点赞 &…