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

news2025/2/25 9:41:37

文章目录

  • 一、在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   mysql

docker 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 TO
  MASTER_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.coloradmin.cn/o/990941.html

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

相关文章

js函数变量提升理解

var n 10function fn() {// var n 20function f() {// 没用var声明,去外层寻找n,直到找到windows为止,找到的话用的就是哟个全局变量,会改变原始全局变量的值n;console.log(n)}var nn 20f()console.log(n);return f}var x fn()// 会在上一…

【C++从0到王者】第二十八站:二叉搜索树的应用

文章目录 前言一、Key模型二、Key/Value模型总结 前言 二叉搜索树的在现实世界的应用很广泛,比如Key模型,Key-Value模型就是常见的两种的模型 一、Key模型 K模型:K模型即只有key作为关键码,结构中只需要存储Key即可&#xff0c…

PaddleOCR学习笔记2-初步识别服务

今天初步实现了网页&#xff0c;上传图片&#xff0c;识别显示结果到页面的服务。后续再完善。 采用flask paddleocr bootstrap快速搭建OCR识别服务。 代码结构如下&#xff1a; 模板页面代码文件如下&#xff1a; upload.html : <!DOCTYPE html> <html> <…

Activiti7工作流引擎:在线流程编辑器Activiti Modoler5.x

一&#xff1a;简介 有的时候我们的流程图需要业务人员自己绘制&#xff0c;然后使用自己绘制的流程图&#xff0c;此时就需要一个在线流程图编辑器需要集成到我们的web系统中。Activiti Modoler是Activiti官方推出的在线流程编辑器。 二&#xff1a;pom.xml <dependency…

tomcat安装、部署JSPGOU项目、Tomcat多实例

安装 官网找包 Apache Tomcat - Welcome! tomcat 8 准备运行环境 安装tomcat catalina.sh 服务脚本管理文件 server.xml 主配置文件 修改8009&#xff08;删除注释&#xff09; 启动tomcat 访问 为了避免每次进入绝对路径启动tomcat 法二&#xff1a; 三&#xff1a;部署…

SpringMvc增删改查

SpringMvc增删改查 一、前期准备二、逆向生成增删改查2.2.aspect切面层2.3.Mybatis generator逆向生成2.4.根据生成代码编写Biz层与实现类 三、controller层代码编写四、前台代码与分页代码五、案例测试 一、前期准备 1.2.导入pom.xml依赖 <?xml version"1.0" …

搭建自己的OCR服务,第三步:PPOCRLabel标注工具安装

一、安装说明 安装好了PaddleOCR后&#xff0c;还需要安装PPOCRLabel这个标注工具&#xff0c;想要自己训练模型的话&#xff0c;有个标注工具会起很大作用。 尤其是PPOCRLabel就是跟PaddleOCR配套的标注工具&#xff0c;同样是开源的。 在下载 PaddleOCR 整个源码中&#x…

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

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

如何去除eclipse中default package

选择default package ,然后选择后面的 选择FILTER 选择 Empty开头的几个 点击ok&#xff0c;就可以去掉空的default package

sql:SQL优化知识点记录(十三)

&#xff08;1&#xff09;行锁理论 &#xff08;2&#xff09;CAP理论 二 、 C、 A、P的含义 借用一下维基百科CAP理论一文中关于C、A、P三者的定义。 &#xff08;3&#xff09;行锁案例讲解 MySql5.5以后数据库默认都是InnoDB存储引擎&#xff0c;事物的操作默认给你提交了…

Unity之3D物理导航系统

一 介绍 Unity自带寻路(导航)系统是unity官方自带的一种寻路系统。我们可以通过它来制作简单的寻路&#xff0c;比如可以制作点击某个位置&#xff0c;让角色自动的绕开障碍走到目标点的效果&#xff0c;比如可以制作敌人AI&#xff0c;让它可以通过NavMesh绕开障碍追击我方单…

l8-d9 UDP通信实现

一、函数接口扩展与UDP通信实现流程 1.write/read到send/recv 函数原型&#xff1a; ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t recv(int sockfd, void *buf, size_t len, int flags); 前三个参数同read/write一样&#xff1b; ssize_t rea…

景联文科技可为多模态语音翻译模型提供数据采集支持

8月22日Facebook的母公司Meta Platforms发布了一种能够翻译和转录数十种语言的人工智能模型——SeamlessM4T&#xff0c;可以在日常生活中或者商务交流中为用户提供更便捷的翻译和转录服务。 相较于传统的文本翻译&#xff0c;这项技术的最大区别在于它可以实现端到端的语音翻译…

对象的构造和析构

目录 构造函数和析构函数 构造函数的分类和调用 c默认构造的函数 浅拷贝和深拷贝 多个对象的构造和析构 初始化列表 类对象作为成员 构造函数和析构函数 对象的初始化和清理是两个非常重要的安全问题&#xff0c;一个对象或者变量没有初始时&#xff0c;对其使用后果是未…

Ae 效果:CC Star Burst

模拟/CC Star Burst Simulation/CC Star Burst CC Star Burst&#xff08;CC 星爆&#xff09;可以模拟星际穿越的效果&#xff0c;也可以像 CC Ball Action 效果模拟球体的扩散运动。 CC Star Burst 效果的原理是将图层网格化&#xff0c;然后基于每个网格里的图层内容取平均颜…

【东软实训Day2】用Java实现客户端与服务器交互

一、客户端-服务器编程模型 1个应用 1个服务器进程 1…N个客户端进程&#xff0c;其中服务器管理资源&#xff0c;并通过操作这种资源为客户端服务。 客户端-服务器模型中的基本操作是事务&#xff08;transaction&#xff09;&#xff08;注&#xff1a;不同于数据库中的t…

软考-高级-信息系统项目管理第四版(完整24章全笔记)

《信息系统项目管理师教程》&#xff08;第4版&#xff09;是由全国计算机专业技术资格考试办公室组织编写的考试用书&#xff0c;根据2022年审定通过的《信息系统项目管理师考试大纲》编写&#xff0c;对信息系统项目管理师岗位所要求的主要知识及应用技术进行了阐述。 《信息…

ubuntu 20.04 通过 samba 共享文件夹到 windows

前言 ubuntu 与 windows 共享&#xff0c;有两条路&#xff0c;一是 windows 的目录共享给 ubuntu&#xff0c;比如使用 VM Ware 虚拟机&#xff0c;直接通过 VMWare 虚拟机共享文件夹的方式&#xff0c;windows 上的目录就共享给了 ubuntu ubuntu 如何把目录共享给 windows 呢…

zemax坐标断点实现光束偏移

简单来说就是将前面的坐标打断&#xff0c;实现新的坐标设置 基础设置&#xff1a; 对表面进行旋转&#xff1a; 系统自动插入坐标断点面 此时设置的旋转角度为0&#xff0c;我们将这个设置为变量&#xff1a; 在评价函数编辑器中选择REAY&#xff0c;控制光线高度 执行优化&a…

指针-矩阵变换

任务描述 给定一个矩阵&#xff0c;请编程将其按照以下约定的操作方式变换后输出。 相关知识 参考之前的关卡。 编程要求 根据提示&#xff0c;在右侧编辑器的Begin-End区域内补充代码。 测试说明 输入&#xff1a;第一行三个正整数 n&#xff0c;m 和 q 分别表示矩阵 A…