基于Docker从零到一实操MySql的主从复制

文章目录

  • 一、在Docker上安装,启动MySQL
      • 查看docker是否安装成功
      • 安装mysql
      • 查看mysql镜像
      • 进入mysql后台操作
      • docker Volume(卷)入门
  • MySql的主从复制
      • 1. 创建MySQL主从复制的网络
      • 2. 创建MySQL主服务器
      • 3. 创建MySQL从服务器
      • 4. 配置主从同步
      • 5.测试主从同步
  • 总结

一、在Docker上安装,启动MySQL

查看docker是否安装成功

docker -v 查看是否已经安装了docker,如下面提示版本信息则是安装了。

➜  ~ docker -v
Docker version 20.10.16, build aa7e414```

查询docker hub 上是否有mysql镜像,
如下 ofiicial 为ok的为官方发布的,一般我们选择就是官方提供的。

docker search mysql
NAME     DESCRIPTION    STARS     OFFICIAL   AUTOMATED
mysql    MySQL is a widely used,   [OK]

使用docker pull mysql 拉去mysql 这里的mysql为上面search 出来的name字段;

安装mysql

➜  ~ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
bd2ec1b01835: Downloading [=========>                                         ]  7.979MB/43.63MB
ec2e560d878c: Download complete
e8397fbbbc3b: Download complete
eff4258297ab: Download complete
137be606bff3: Download complete
0ef6a538fcba: Download complete
a5431fa8c17d: Downloading [========>                                          ]  10.14MB/57.7MB
23af94ba6338: Download complete
87a8250fff28: Downloading [=====>                                             ]  6.919MB/63.78MB
6b7e1aea563b: Waiting

查看mysql镜像

等待⌛️安装完成✅后,docker images -a 查看本地镜像

➜  ~ docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        latest    bdfb0ec4d54a   4 weeks ago   599MB

docker run -it mysql /bin/bash

( 参数 -i -t 等价于 -it 表示insert , 进入 ; /bin/bash 表示 shell 脚本交互界面 )

➜  ~ docker run -it mysql /bin/bash
bash-4.4# ls
bin   dev			  etc	lib    media  opt   root  sbin	sys  usr
boot  docker-entrypoint-initdb.d  home	lib64  mnt    proc  run   srv	tmp  var

基于上一步后,查看mysql 的版本

bash-4.4# mysql -V
mysql  Ver 8.1.0 for Linux on aarch64 (MySQL Community Server - GPL)

退出当前窗口🪟,docker 容器也同时推出,docker ps 查看后没有记录

bash-4.4# exit
exit

进入mysql后台操作

启动mysql 后一直运行:

  docker run -p 3306:3306 --name JY_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql

像上述的命令运行的mysql,如果只是平时玩玩是没问题。因为没有做到备份数据记录📝,如果某个(100+150)运行 docker rm -f mysql 后,你的mysql数据也被删除了。

docker Volume(卷)入门

这里就要说说 docker Volume 卷

Docker 卷(Volume)是用于持久化存储数据的一种机制,可以将宿主机上的文件系统目录或者其他容器挂载到容器中,以方便地对数据进行管理和共享。

下面是 Docker 卷的一些特点和使用方法:

  1. 数据持久化:容器运行时的数据保存在卷中,即使容器停止或删除,数据仍然存在。

  2. 数据共享:多个容器可以挂载同一个卷,实现数据共享。

  3. 管理文件系统:Docker 卷可以为容器指定一个特定的文件系统,从而使容器和宿主机之间的文件系统隔离。

  4. 备份和恢复:通过卷,可以将容器的数据备份到宿主机,方便容器的数据管理和恢复。

使用 Docker 卷的步骤如下:

  1. 创建卷:可以使用 docker volume create 命令创建卷,也可以在容器启动时自动创建。

  2. 挂载到容器:使用 -v 或 --mount 参数将卷挂载到容器中,可以指定挂载点和读写权限等参数。

  3. 访问数据:在容器中使用挂载点访问卷中的数据。

例如,下面的命令将创建一个名为 myvolume 的卷,并将其挂载到名为 mycontainer 的容器的 /data 目录中:

docker volume create myvolume
docker run -v myvolume:/data --name mycontainer myimage

这样,在容器中访问 /data 目录时,就可以访问到卷中的数据了。(也就是数据共享的味道了)如果需要备份或恢复数据,可以使用 docker cp 命令将容器中的数据备份到宿主机上,或者将宿主机上的数据恢复到容器中

看了上述的基本认识,我们回到关于 250 删了我们的mysql的数据备份问题。我们照着上面画葫芦,加上 -v 以及备份的路径,

➜  ~ docker run -p 3306:3306 --name mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql

这里我提前安装了 docker desktop 工具,下面就是带了 -v 也就是有卷和没卷的创建的mysql,明显带 -v 的数据大小大了很多。也可以使用 docker inspect my_container 查看;
请添加图片描述

然后我们 docker ps 查看,exec 进入操作一下

 docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
0fbfa37c3274   mysql     "docker-entrypoint.s…"   42 minutes ago   Up 42 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   mysqldocker exec -it 0fbfa37c3274 /bin/bash

我们进入mysql后台 ,然后就是创建表,插入数据,这些操作就和在mysql操作一样

bash-4.4# mysql -u root -p
Enter password:
mysql> create DATABASE TESTDB;
mysql> CREATE TABLE IF NOT EXISTS `test_tbl`(`testdb_id` INT UNSIGNED AUTO_INCREMENT,`testdb_title` VARCHAR(100) NOT NULL,`testdb_author` VARCHAR(40) NOT NULL,`testdb_date` DATE,PRIMARY KEY ( `testdb_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> use TESTDB;
Database changed
mysql> INSERT INTO test_tbl -> (testdb_title, testdb_author, testdb_date)-> VALUES-> ("learn docker use mysql", "chayedan", NOW());
mysql>  SHOW DATABASES;
mysql>  SHOW DATABASES LIKE '%DB';

上面依次是创建数据库 TESTDB,创建表 test_tbl,插入数据,显示数据库;

MySql的主从复制

在docker环境中设置MySQL主从复制,需要以下步骤:

1. 创建MySQL主从复制的网络

docker network create mysql-replication

2. 创建MySQL主服务器

docker run -d --name mysql-master \--network mysql-replication \-e MYSQL_ROOT_PASSWORD=master-pass \-e MYSQL_REPLICATION_USER=repl \-e MYSQL_REPLICATION_PASSWORD=repl-pass \mysql:latest \--server-id=1 \--log-bin=mysql-bin \--binlog-do-db=testdb \--binlog-ignore-db=mysql \--gtid-mode=ON \--enforce-gtid-consistency=ON \--log-slave-updates=ON \--auto-increment-offset=1 \--auto-increment-increment=2

3. 创建MySQL从服务器

docker run -d --name mysql-slave \--network mysql-replication \-e MYSQL_ROOT_PASSWORD=slave-pass \-e MYSQL_REPLICATION_USER=repl \-e MYSQL_REPLICATION_PASSWORD=repl-pass \mysql:latest \--server-id=2 \--log-bin=mysql-bin \--binlog-do-db=testdb \--binlog-ignore-db=mysql \--gtid-mode=ON \--enforce-gtid-consistency=ON \--relay-log=mysql-relay-bin \--log-slave-updates=ON \--read-only=ON \--auto-increment-offset=2 \--auto-increment-increment=2 \--master-info-repository=TABLE \--relay-log-info-repository=TABLE \--replicate-do-db=testdb

4. 配置主从同步

在主服务器上创建一个用户和密码,用于从服务器连接到主服务器。在主服务器上执行以下命令:

CREATE USER 'repl'@'%' IDENTIFIED BY 'repl-pass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

然后,在从服务器上执行以下命令:

CHANGE MASTER TOMASTER_HOST='mysql-master',MASTER_USER='repl',MASTER_PASSWORD='repl-pass',MASTER_AUTO_POSITION=1;
START SLAVE;

5.测试主从同步

在主服务器上创建一个测试数据库和表:

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL
);
INSERT INTO users (name) VALUES ('Alice'), ('Bob'), ('Charlie');

然后,在从服务器上查询该表:

USE testdb;
SELECT * FROM users;

如果返回结果与主服务器上的结果一致,则说明主从同步已经成功。


总结

我们一开始介绍了如何在docker上安装与启动mysql,以及进入mysql的后台创建数据库与表等;接着我们过了一遍如何基于docker操作mysql 主从库复制。

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

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

相关文章

2023高教社杯数学建模E题思路代码 - 黄河水沙监测数据分析

# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响, 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…

在学习编程的过程中,我会记录下以下内容:

在学习编程的过程中,我会记录下以下内容: 常用代码片段:我会记录一些常用的代码片段,例如文件读写、列表操作、字符串处理等。这些代码片段可以在日常编程中快速复用,提高编码效率。 # 文件读取 with open(file.txt,…

软考高级架构师下篇-14面向服务架构设计理论

目录 1. 引言2. SOA的相关概念3. SOA的发展历史4. SOA的参考架构5. SOA 主要协议和规范6. SOA设计的标准要求7. SOA的作用与设计原则8. SOA的设计模式9. SOA构建与实施10. 前文回顾1. 引言 在面向服务的体系结构(Service-Oriented Architecture,SOA)中,服务的概念有了延伸…

使用EMgu检测人脸

1,安装EMgu 在NuGet中,查找并安装EMgu 2,做人脸检测 首先,声明几个重要的类 //Thread.Sleep(3000);matImg = new Mat();capture.Retrieve(matImg, 0); frame=new Image<Bgr, byte>(matImg.Bitmap); 当,frame != null时,检测到人脸 3,给人脸画框 i…

苹果macOS 13.5.2正式发布 修复ImageIO进程

9 月 8 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5.2 更新&#xff08;内部版本号&#xff1a;22G91&#xff09;&#xff0c;本次更新距离上次发布隔了 21 天。 需要注意的是&#xff0c;因苹果各区域节点服务器配置缓存问题&#xff0c;可能有些地方探测到…

索尼 toio™ 应用创意开发征文 | 如何用Python控制Q宝进行机器人擂台赛

你是否曾经想过&#xff0c;如果能用编程来控制真实的物体&#xff0c;那该有多有趣&#xff1f;如果能让一个小方块按照你的指令来移动、旋转、闪烁&#xff0c;那该有多酷&#xff1f;如果能让一个小方块和其他小方块互动&#xff0c;那该有多神奇&#xff1f;这些想法&#…

编程语言的类型划分

汇编语言 低级语言&#xff0c;通过汇编器翻译成机器语言 MOV、PUSH、ADD等 特点&#xff1a; 对机器友好、执行效率高、移植性差。 人类操作不太方便&#xff0c;需要专业人员。 高级语言 C、C、Java、Python、Golang等 最终还是会转化成为机器语言。 执行过程划分 编译型 ●…

OpenText EnCase Endpoint Security 识别潜在的网络安全威胁并快速消灭威胁

如今&#xff0c;敏感数据丢失和 IT 系统中断是各类组织面临的最大危机。网络攻击频率不断攀升、修复成本日益增加以及响应时间延长都加剧了数据丢失的隐患。 OpenText EnCase Endpoint Security 的高效体现在能够加速检测恶意活动&#xff0c;并在其导致不可挽回的损失或丢失敏…

嵌入式IDE(2):KEIL中SCF分散加载链接文件详解和实例分析

在上一篇文章IAR中ICF链接文件详解和实例分析中&#xff0c;我通过I.MX RT1170的SDK中的内存映射关系&#xff0c;分析了IAR中的ICF链接文件的语法。对于MCU编程所使用的IDE来说&#xff0c;IAR和Keil用得比较多&#xff0c;所以这一篇文章就来分析一下Keil的分散文件.scf(scat…

【设计模式】组合模式实现部门树实践

1.前言 几乎在每一个系统的开发过程中&#xff0c;都会遇到一些树状结构的开发需求&#xff0c;例如&#xff1a;组织机构树&#xff0c;部门树&#xff0c;菜单树等。只要是需要开发这种树状结构的需求&#xff0c;我们都可以使用组合模式来完成。 本篇将结合组合模式与Mysq…

有哪些做流程图的软件?分享一些制作方法和注意事项

流程图是一种常用的图表&#xff0c;可以用于表示各种工作流程、系统架构、决策流程等。在现代工作生活中&#xff0c;制作流程图已经成为了必备的技能之一。本文将介绍一些常用的做流程图的工具&#xff0c;并分享一些制作方法和注意事项。 做流程图的工具 1.迅捷画图&#x…

AI时代的较量,MixTrust能否略胜一筹?

人工智能的能力正在迅速接近人类&#xff0c;而在许多细分领域&#xff0c;已经超越了人类。虽然短期内这个突破是否会导致人工通用智能&#xff08;AGI&#xff09;还不清楚&#xff0c;但我们现在有的模型被训练成在数字交互中完美地模仿高能人类。尽管AGI仍不确定&#xff0…

配置 Windows 系统环境变量

直接按键盘上面的 WINS 打开 Windows 搜索 搜索“编辑系统环境变量” 也可以右键此电脑->属性->高级系统设置打开相同的界面 点击环境变量 一般添加就是添加在框出的 Path 里面&#xff0c;双击可以看到现有的环境变量并进行编辑 例如我在博客中写把 Java 的 jdk 解压好…

用 Python 微调 ChatGPT (GPT-3.5 Turbo)

用 Python 微调 ChatGPT (GPT-3.5 Turbo) 备受期待的 GPT-3.5 Turbo 微调功能现已推出&#xff0c;并且为今年秋季即将发布的 GPT-4 微调功能奠定了基础。 这不仅仅是一次简单的更新——它是一个游戏规则改变者&#xff0c;为开发人员提供了完美定制人工智能模型的关键解决方案…

【备忘】清理Office缓存

【背景】电脑安装了M365 Apps for enterprise的客户端&#xff0c;遇到不常见的奇怪问题。尝试看清理缓存是否可以解决。 【清理步骤】 1. 关闭所有Office365 应用&#xff1b; 2. 搜索 %AppData% &#xff0c;并打开该文件夹&#xff1b; 3. 进到 AppData > Local > M…

基本介绍——数据挖掘

1.数据挖掘的定义 数据挖掘是采用数学的、统计的、人工智能和神经网络等领域的科学方法&#xff0c;如记忆推理、聚类分析、关联分析、决策树、神经网络、基因算法等技术&#xff0c;从大量数据中挖掘出隐含的、先前未知的、对决策有潜在价值的关系、模式和趋势&#xff0c;并…

深度学习Tensorflow: CUDA_ERROR_OUT_OF_MEMORY解决办法

目前在用深度学习训练&#xff0c;训练中设置batch size后可以正常跑通&#xff0c;但是在训练一轮save_model时&#xff0c;总出现这个错误&#xff0c;即使我调batch size到1也依旧会报错。 发现是在 调用logger时出现问题。 查询后了解到是因为TensorFlow中的eager_executi…

Ei、Scopus双检索 | 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024)

会议简介 Brief Introduction 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024) 会议时间&#xff1a;2024年4月26日-28日 召开地点&#xff1a;中国宜昌 大会官网&#xff1a;www.faiml.org FAIML 2024将围绕“人工智能与机器学习”的最新研究领域而展开&#xff0c;为…

VBA技术资料MF54:VBA_EXCEL实时获取鼠标位置

【分享成果&#xff0c;随喜正能量】若人散乱心&#xff0c;乃至以一花&#xff0c;供养于画像&#xff0c;渐见无数佛。所以发一幅释迦牟尼佛像&#xff0c;与同修善友一起每日在微博上供养&#xff0c;只要有供养之心&#xff0c;便可积累功德。以此回向&#xff0c;愿求者如…

Apache DolphinScheduler - 快速扩展 TaskPlugin 从入门到放弃

目前在大数据生态中&#xff0c;调度系统是不可或缺的一个重要组件。Apache DolphinScheduler 作为一个顶级的 Apache 项目&#xff0c;其稳定性和易用性也可以说是名列前茅的。而对于一个调度系统来说&#xff0c;能够支持的可调度的任务类型同样是一个非常重要的因素&#xf…