基于Docker的Mysql主从复制搭建

为什么基于Docker搭建?

资源有限
虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐
一台机器上可以运行多个Docker容器
Docker容器之间相互独立,有独立ip,互不冲突
Docker使用步骤简便,启动容器在秒级别

利用Docker搭建主从服务器

首先拉取docker镜像,我们这里使用5.7版本的mysql:

docker pull mysql:5.7

然后使用此镜像启动容器,这里需要分别启动主从两个容器

Master(主):

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

Slave(从):

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

Master对外映射的端口是3339,Slave对外映射的端口是3340
因为docker容器是相互独立的,每个容器有其独立的ip,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用mysql默认的3306端口,否则可能会出现无法通过ip连接docker容器内mysql的问题。

使用docker ps命令查看正在运行的容器

此时可以使用Navicat等工具测试连接mysql

配置Master(主)

通过

docker exec -it 627a2368c865 /bin/bash

命令进入到Master容器内部,也可以通过
docker exec -it mysql-master /bin/bash命令进入。
627a2368c865是容器的id,而mysql-master是容器的名称。

cd /etc/mysql切换到/etc/mysql目录下,在这里插入代码片然后vi my.cnf对my.cnf进行编辑。此时会报出bash: vi: command not found,需要我们在docker容器内部自行安装vim。
使用apt-get install vim命令安装vim

会出现如下问题:

Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Unable to locate package vim
执行apt-get update,然后再次执行apt-get install vim即可成功安装vim。
然后我们就可以使用vim编辑my.cnf,在my.cnf中添加如下配置:

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

配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启。重启mysql服务时会使得docker容器停止,我们还需要docker start mysql-master启动容器。

下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

配置Slave(从)

和配置Master(主)一样,在Slave配置文件my.cnf中添加如下配置:

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

配置完成后也需要重启mysql服务和docker容器,操作和配置Master(主)一致。

连接Master(主)和Slave(从)

在Master进入mysql,执行show master status;

File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。

在Slave 中进入 mysql,执行

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= 2830,
master_connect_retry=30;

命令解释说明:

master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ipmarkmaster_port:Master的端口号,指的是容器的端口号master_user:用于数据同步的用户master_password:用于同步的用户的密码master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。

正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。## 开启主从!!
使用start slave
开启主从复制过程,然后再次查询主从同步状态
show slave status \G;

SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。

主从复制排错:

使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。网络不通检查ip,端口密码不对检查是否创建用于同步的用户和用户密码是否正确pos不对

检查Master的 Position

测试主从复制 测试主从复制方式就十分多了,最简单的是在Master创建一个数据库,然后检查Slave是否存在此数据库。

关于django的主从以及多数据库配置还可参考网略毒刘的这篇博客

https://blog.csdn.net/qq_41856814/article/details/108108650

【MySQL】基于Docker的Mysql主从复制搭建相关推荐

  1. 基于docker的php调用基于docker的mysql数据库的方法

    1:建立基于docker的mysql,参考 Mac上将brew安装的MySql改用Docker执行 2:建立基于docker�php image 在当前目录,建立Dockerfile,内容如下 FRO ...

  2. 基于 Docker Compose 容器化搭建 Wordpress

    基于 Docker Compose 容器化搭建 Wordpress 最近由于业务需求帮公司搞了几个 Wordpress 作为官网,中间也是踩了不少坑,倒不是搭建 wordpress 难,主要是 wor ...

  3. 安装MySQL示例   docker pull mysql

    安装MySQL示例   docker pull mysql 错误的启动   docker run --name mysql01 -d mysql 正确的启动 docker run --name mys ...

  4. 基于docker在Ubuntu上搭建TensorFlow-GPU计算环境

    这里转载一篇Docker安装TF GPU的版本 基于docker在Ubuntu上搭建TensorFlow-GPU计算环境 由于实验室的服务器有多人共享使用,而不同人的代码对应的keras和tensor ...

  5. 基于docker的集群搭建

    基于docker的集群搭建 2.3.2.1 环境准备 ​ 1.搭建docker ​ 要想在docker上搭建solr集群,首先安装docker的环境.这个就不再演示,如果没有学过docker的同学可以 ...

  6. 基于Docker的拓扑网络搭建可行性探究

    基于Docker的拓扑网络搭建可行性探究 文章目录 基于Docker的拓扑网络搭建可行性探究 引入 Docker环境配置与容器选择 Image 命令 (镜像相关) Container命令(容器相关) ...

  7. 基于Docker的Mysql主从复制搭建_mysql5.7.x

    文章目录 为什么基于Docker搭建? 一.拉取镜像创建容器 1. 拉取mysql:5.7镜像 2. 创建master容器 3. 创建slave容器 4. 查看正在运行的容器 5. 此时可以使用Nav ...

  8. 基于Docker部署Mysql主从复制-实战详解篇

    一.前言 MySQL的主从复制详细讲解,根据网上教程也踩了很多坑,浪费了一些时间 ,特地全面的梳理下基于docker构建的mysql主从复制构建过程.遇到的问题以及提供安装包样例等 希望一篇文章足以解 ...

  9. 基于Docker的Mysql主从配置搭建

    主从架构背景 数据安全,可以进行数据的备份: 读写分离,对于大部分的业务系统而言,都是读多写少,若访问压力过大时,可以把请求分发给从服务器,从而缓解数据库访问的压力: 故障转移(高可用),当主节点宕机 ...

最新文章

  1. Postman系列之@RequestBody修饰的对象传参数
  2. 在web项目中使用SpringMVC
  3. 办公室自动化系统_大队举办办公自动化系统培训班
  4. vagrant up报错 Warning: Authentication failure. Retrying...解决方案
  5. python使用教程pandas-「Python」pandas入门教程
  6. 稀疏编码(Sparse Coding)(二)
  7. MySQL:8种SQL典型错误用法,值得收藏!
  8. 数据库:为什么阿里巴巴禁止使用存储过程?
  9. 获取字段为List类型中的泛型类型
  10. 2020笔记本性价比之王_2020轻薄本性价比之王_2020轻薄本哪款好
  11. Dubbo消费者代理的创建
  12. 51Nod-1018 排序【排序】
  13. javascript权威指南 学习笔记之变量作用域
  14. 使用navicat无法登陆oracle 数据库
  15. 微信读书产品分析报告(附:信息结构图、功能结构图、产品结构图)
  16. 从零开始自制实现WebServer(五)---- 浅沿芳草鲜花小路静心踱步 拨云见雾终见多线程ThreadPool
  17. TDChat国内ChatGPT镜像网站最新网站入口地址
  18. 中职计算机老师的一天,信息技术教师的一天
  19. P型MOS管开关电路及工作原理详解-KIA MOS管
  20. 数字定时误差检测算法系列之 ———时域Gardner算法

热门文章

  1. [算法]不使用*、/、+、-、%操作符求一个数的1/3
  2. SIP与RTP综合应用5-RTP解包过程
  3. 虚拟机NAT模式联网
  4. Sublime Text3使用Package Control 报错There Are No Packages Available For Installation
  5. python3模块: requests
  6. 七个帮助你处理Web页面层布局的jQuery插件
  7. OC 中 load 方法和 initialize 方法的异同
  8. poj 3278 catch that cow BFS(基础水)
  9. Android去掉listView,gridView等系统自带阴影
  10. Eclipse高级使用技巧