基于Docker的mysql主从复制

2023-11-02

目录

一、拉取mysql

 二、启动两个mysql容器

2.1 主master

2.2 从slave

三、配置master

3.1 进入master内部配置

 3.2 安装vim命令

3.3 重启mysql

3.4 创建数据同步用户(可不建,直接用root)

四、配置slave

4.1 编辑slave文件

 4.2 重启mysql

五、配置主从复制

5.1 查看master状态

5.2 配置slave 

5.3 启动或关闭主从复制


声明:已经实测通过

一、拉取mysql

docker pull mysql:5.7

 二、启动两个mysql容器

2.1 主master

docker run -p 3339:3306 --name mysql_master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

2.2 从slave

docker run -p 3340:3306 --name mysql_slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

三、配置master

3.1 进入master内部配置

通过`docker exec -it 627a2368c865 /bin/bash`命令,进入mysql内部,也可以通过`docker exec -it mysql_master /bin/bash`进入。

`cd /etc/mysql`到此目录下,然后编辑`vi my.cnf`,内容如下

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

 3.2 安装vim命令

编辑my.cnf会遇到vi和vim命令不可用(因为容器内部没安装,需要自己手动安装),遇到如下情况就是需要安装vim的

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package vim

3.3 重启mysql

重启mysql `service mysql restart`,重启时docker容器会关闭,需要重新启动docker容器`docker start mysql-master`

3.4 创建数据同步用户(可不建,直接用root)

进入master容器,执行如下命令

mysql -uroot -p123456
# 创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 授权
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

四、配置slave

4.1 编辑slave文件

参照3.1进入slave容器,`cd /etc/mysql`进入到此目录下,编辑`vi my.cnf`

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

 4.2 重启mysql

重启mysql `service mysql restart`,重启时docker容器会关闭,需要重新启动docker容器`docker start mysql_slave`

五、配置主从复制

5.1 查看master状态

根据3.1进入master容器

mysql -uroot -p123456
show master status;

查看到如下信息 

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      617 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

重点:记住File、Position内容,下文要用到 

5.2 配置slave 

mysql -u root -p
change master to master_host='129.78.272.8', master_user='slave', master_password='123456', master_port=3339, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;

关键字说明

master_host:实际服务器地址

master_user:master 中 mysql 用户的账号

master_password:master 中 mysql 用户的密码

master_port:对外暴露的端口

master_log_file:5.1提到的file文件

master_log_pos:5.1提到的偏移量

此时查看slave状态Slave_IO_Running和Slave_SQL_Running都是No

show slave status \G

5.3 启动或关闭主从复制

进入slave的mysql容器内部,执行如下指令

mysql -uroot -p123456
# 开启
start slave;
# 关闭
stop slave;

此时再看slave状态,状态如下

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果不是,需要确认网络是否连通等情况

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Docker的mysql主从复制 的相关文章

  • 是否有工具可以将 Neo4j 图转储为 Cypher 并从 Cypher 重新加载它?

    每个熟悉 MySQL 的人都可能使用过 mysqldump 命令 它可以生成代表 MySQL 数据库中的架构和数据的 SQL 语句文件 这些 SQL 文本文件通常用于多种用途 备份 播种副本 在安装之间复制数据库 将产品数据库复制到临时环境
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • 无法解析docker容器内的域名

    我在 Windows PC 上的 virtualbox 中运行 Linux 虚拟机 我在虚拟机中安装了docker 然后我使用以下命令启动了一个高山容器docker run it alpine 在这个容器中 我可以成功 ping 外部 IP
  • 哈希 MySQL 数据库架构

    我想对 MySQL 数据库模式 没有数据 进行哈希 签名 以便对其进行校验和 以确保它不被其他人修改 我怎样才能实现它 据我了解您的问题 您需要表校验和 checksum table table 所以 我想 只需对空表进行校验和
  • 无法解析 docker 容器之间的主机名

    我在单独的撰写文件中创建了两个容器 用于应用程序隔离 每个应用程序可能在撰写文件中定义了多个容器 例如后备数据库 这些容器通过名为 common 的外部网络链接 一个示例撰写文件是 version 2 services rabbitmq i
  • 在 config.js 中打开 admin 以查看服务器统计信息

    拉动后运行此命令 docker run d p 27017 27017 e MONGO INITDB ROOT USERNAME admin e MONGO INITDB ROOT PASSWORD password name mongod
  • 找时间通过 PHP 执行 MySQL 查询

    我在互联网上看到过这个问题 here http www phpbuilder com board showthread php t 2100256 and here http answers yahoo com question index
  • ZeroDateTimeBehavior=convertToNull 在使用 hibernate 的 jdbc url 中不起作用

    通过 extern 属性文件 url 指定如下 jdbc mariadb xxxxx 3306 xxxxx zeroDateTimeBehavior convertToNull 连接工作正常并且能够查询数据库 通过休眠 我创建了一个映射到带
  • 如何使用 PHP 通过 JSON 发送 HTML 元素?

    以下功能 try query this gt pdo gt prepare SELECT FROM bookings WHERE TourID AND dTourDate and Status NOT LIKE Cancelled quer
  • 哈希密码字段使用什么数据类型以及长度?

    我不确定密码哈希是如何工作的 稍后将实现 但现在需要创建数据库模式 我正在考虑将密码限制为 4 20 个字符 但据我了解 加密后哈希字符串的长度将有所不同 那么 如何将这些密码存储在数据库中呢 更新 仅使用哈希函数不足以存储密码 你应该阅读
  • 将 Python 列表(JSON 或其他)插入 MySQL 数据库

    所以我在Python中有一堆数组数据 嗯 相反 我有一个清单 我试图将此数组存储到 MySQL 数据库中的单个单元格中 我尝试使用 JSON 来序列化我的数据 但也许我不明白 JSON 是如何工作的 因此 在连接到我的数据库后 我尝试了上游
  • IMAP 和 PHP - 从已发送文件夹和收件箱文件夹中获取所有电子邮件

    我正在尝试获取接收和发送的所有电子邮件 并使用 PHP 将其写入 mySQL 数据库 我使用的主机名是 hostname imap gmail com 993 imap ssl INBOX 它仅引用收件箱 并成功抓取收到的电子邮件 为了抓取
  • Heroku 码头部署

    我正在关注这篇文章https devcenter heroku com articles container registry and runtime https devcenter heroku com articles containe
  • 如何查找所有mysql表之间的所有关系?

    如何找到MySQL所有表之间的所有关系 例如 如果我想知道大约有 100 个表的数据库中表的关系 有什么办法知道这个吗 从编程角度来说 更好的方法是从以下位置收集数据 INFORMATION SCHEMA KEY COLUMN USAGE表
  • Docker 网络 - nginx:[emerg] 在上游找不到主机

    我最近开始迁移到 Docker 1 9 和 Docker Compose 1 5 的网络功能来取代使用链接 到目前为止 通过链接 nginx 通过 docker compose 连接到位于一组中不同服务器中的 php5 fpm fastcg
  • 如何将变量设置为触发器 MYSQL 内存储过程的结果?

    我这里有一个小问题 我正在为我的数据库工作创建一个触发器 但我不知道如何在触发器内使用存储过程 我想将过程的结果保存在变量中 然后使用稍后在 IF 比较器上变量 这是我的代码 DELIMITER CREATE TRIGGER insert
  • MySQL - 从另一个表插入与常量合并的数据

    我有一个包含一些数据的临时表 products temp 并且我有另一个需要将数据插入其中的表 产品 我需要在新记录上手动设置一些常量 例如vendor id 1等 是否可以在一次请求中插入临时表数据和常量 临时产品 product nam
  • 无法连接到docker中的elasticsearch容器

    我正在尝试使用 docker 的官方 elasticsearch 镜像 我遵循了本指南 https www elastic co guide en elasticsearch reference current docker html但是当
  • 如何更新 MySQL 数据库中的两列?

    这不起作用 UPDATE customers SET firstname John AND lastname Smith WHERE id 1 用逗号分隔值 AND是一个逻辑运算符 它的位置是WHERE and ON条款 UPDATE cu
  • Unicode(希腊语)字符存储在数据库中,例如“??????”

    数据库中的希腊字符就像问号 我找不到解决办法 我使用 Java Swing 开发了一个应用程序 但是当我在 MySQL 中插入希腊字母时 就像问号一样 我将数据库排序规则更改为 utf8 并将列也更改为 utf8 我的项目编码设置为UTF

随机推荐

  • spring 整合 mybatis 中数据源的几种配置总结

    spring 整合 mybatis 中数据源的几种配置方式 因为spring 整合mybatis的过程中 有好几种整合方式 尤其是数据源那块 经常看到不一样的配置方式 总感觉有点乱 所以今天有空总结下 一 采用org mybatis spr
  • 图数据库Neo4j在GIS系统的应用

    1 概述 1 1 图数据库简介 图数据库 Graph Database 是基于图论实现的一种新型的NoSQL数据库 他的数据存储结构和数据的查询方式都是以图论为基础的 图论中图的基本元素为节点和边 在图数据库中对应的就是节点和关系 在图数据
  • layui table is not a valid module

    table is not a valid module 后来发现 是因为layui是个库 引用的时候需要引用整个库 而不是只引用单个文件
  • 在MaxOSX系统上安装gdb并给gdb制作证书

    在MacOSX系统上是默认没有安装gdb的 这给MacOSX应用开发人员调试OSX应用程序带来一定困难 因此在MacOSX上安装gdb对应用程序进行调试是一个很好的选择 但是在MacOSX上安装gdb并不想在Linux上那么容易安装 他有一
  • GD32_时钟配置解析

    GD32 时钟配置解析 本文以GD32F303型号为基础 依照标准库GD32F30x Firmware Library V2 1 5为例 作为笔记简单记录个人对其时钟配置的理解 后续会持续更新本篇笔记内容 文章目录 GD32 时钟配置解析
  • Source insight 4.0 暗色主题,模仿Atom one-darkv配色方案

    我是在MAC OS 10 12下使用crossover安装的 在wine环境下装4 0有个无法解决的bug是toolbar非常的宽 所以我取消了 反正用快捷键可以代替 关于wine安装之后界面模糊的问题请参考我这个帖子http blog c
  • consul安装

    consul安装 1 什么是consul 2 安装过程 2 1 下载 2 2 解压 使用unzip命令解压 在linux上这个时候就代表已经安装成功了 2 3 启动consul 2 4 访问consul的后台管理页面 其端口默认是8500
  • 【PTA】A-B

    本题要求你计算A B 不过麻烦的是 A和B都是字符串 即从字符串A中把字符串B所包含的字符全删掉 剩下的字符组成的就是字符串A B 输入格式 输入在2行中先后给出字符串A和B 两字符串的长度都不超过104 并且保证每个字符串都是由可见的AS
  • spring工程的单元测试用例加载配置方法

    spring开发时可以使用基于java注解的配置 也可以使用基于xml配置文件的配置方法 大多数情况下在开发过程中需要编写单元测试用例针对不同的模块进行独立测试用于验证独立的功能 本文介绍在基于不同的配置项目中单元测试加载配置的方法 1 基
  • springboot 使用 logback 进行日志记录、并对文件日志以日期和大小进行拆分的 demo 示例

    1 描述 一个springboot项目使用 logback 记录程序运行过程中的日志 配置 logback 生成控制台日志和文件日志记录 以及对文件日志以日期和大小进行拆分的 demo示例 环境 IDE idea 2021 3 JDK 1
  • 电源纹波的测量

    测试手法 A 使用纹波探头 DC 50ohm 用弹簧地连接到地上 然后将探头点到测试电源上 示波器打开20MHz的带宽限制 打开余晖模式 将测试通道的输出电压值移到示波器屏幕中间 让让示波器采样1 3分钟 最后看示波器上的峰峰值即可 B 使
  • CCSpriteFrameCache的用法

    转自 https www cnblogs com pengyingh articles 2436648 html 让我们首先创建一个工程骨架 使用cocos2d工程模板创建一个新的项目并取名为AnimBear 接下来 下载一些由我的老婆制作
  • qt day 5

    1 gt 实现闹钟功能 pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The following define make
  • C# USB通讯

    关注 星标公众号 及时获取更多技术分享 作者 冰茶奥利奥 微信公众号 嵌入式电子创客街 项目工程文件下载 工程文件下载地址 看了很多网上的博客 讲述如何用C 进行USB设备操作 很多都是不对的 以至于南辕北辙 我们可以使用usb库 在c下有
  • 打开方式中无法添加程序,无法用指定程序打开

    用T32打开 ts2文件时 右击 打开方式 中 浏览 到t32start exe的安装目录 点击 确定 可是在 打开方式 中找不到t32start exe程序 可能是因为注册表中t32start exe程序的路径指定错误 原因 解压安装包
  • 通过自定义 Vue 指令实现前端曝光埋点

    前言 互联网发展至今 数据的重要性已经不言而喻 尤其是在电商公司 数据的统计分析尤为重要 通过数据分析可以提升用户的购买体验 方便运营和产品调整销售策略等等 埋点就是网站分析的一种常用的数据采集方法 埋点按照获取数据的方式一般可以分为以下
  • flink学习day05:checkpoint 原理与实践

    flink checkpoint checkpointe是什么 基于state出发 flink基于与state可以做非常多复杂的事情 但是state是存储在内存中 内存中的数据是不安全的易丢失的 所以flink为了解决这个问题就引入了che
  • 牛客网C语言编程初学者入门训练135题

    文章目录 1 实践出真知 2 我是大V 3 有容乃大 4 小飞机 5 反向输出四位数 6 大小写转换 7 缩短二进制 8 十六进制转十进制 9 printf的返回值 10 成绩输入输出 11 学生基本信息输入输出 12 字符金字塔 13 判
  • 线稿图视频制作--从此短视频平台不缺上传视频了

    博客首页 knighthood2001 欢迎点赞 评论 热爱python 期待与大家一同进步成长 给大家推荐一款很火爆的刷题 面试求职网站 跟我一起来巩固基础 开启刷题之旅吧 这年头还不来尝试线稿图视频 之前笔者也写过将视频转换为线稿图视频
  • 基于Docker的mysql主从复制

    目录 一 拉取mysql 二 启动两个mysql容器 2 1 主master 2 2 从slave 三 配置master 3 1 进入master内部配置 3 2 安装vim命令 3 3 重启mysql 3 4 创建数据同步用户 可不建 直