基于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 mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Slave(从):

docker run -p : --name mysql-slave -e MYSQL_ROOT_PASSWORD= -d mysql:5.7

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

使用docker ps -a 命令查看正在运行的容器:
此时可以使用Navicat等工具测试连接mysql
ip地址:
是你的本地ip如果你是在服务器上的docker就是的你的ip
win10里的是127.0.0.1
端口:拉取容器设置的端口
用户名:就是root
密码:拉取容器设置的密码 123456

配置Master(主)

进入容器docker exec -it mysql-master /bin/bash
 
安装vim:
执行apt-get update
然后再次执行apt-get install vim
成功安装vim
 
cd /etc/mysql切换到/etc/mysql目录下
 
vim my.cnf对my.cnf进行编辑
在my.cnf中添加如下配置:
[mysqld]
server-id=100
log-bin=mysql-bin
 
重启service mysql restart
启动容器docker start mysql-master
 
下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
 
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
 
 
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
或者在mysql创建
进入mysql
mysql -uroot -p
123456
 
 
创建库 create database mmj;
配置Slave(从)
进入容器docker exec -it mysql-slave /bin/bash
执行apt-get update
然后再次执行apt-get install vim
成功安装vim
 
cd /etc/mysql切换到/etc/mysql目录下
 
vim my.cnf对my.cnf进行编辑
在my.cnf中添加如下配置:
[mysqld]
server-id=101
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin
 
重启service mysql restart
启动容器docker start mysql-slave
 
链接Master(主)和Slave(从)
在Master的mysql里,执行show master status;
File和Position字段的值后面将会用到
 
容器的独立ip docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
 
'172.17.0.2'
 
在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= 609, master_connect_retry=30;
 
master_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;用于查看主从同步状态。
 
正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No
 
开启主从复制 start slave
 
查询主从同步状态 show slave status;
 
SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。
 
测试主从复制
测试主从复制方式就十分多了,最简单的是在Master创建一个数据库,然后检查Slave是否存在此数据库。
 
进入mysql
 
mysql -uroot -p
 
密码 123456
 
创建库 create database mmj;
 
展示 show databases;

本文亲测,参考:https://www.cnblogs.com/songwenjie/p/9371422.html博客,基于该博客转载整理

基于Docker的Mysql主从复制的更多相关文章

  1. 基于Docker的Mysql主从复制搭建

    来源:https://www.cnblogs.com/songwenjie/p/9371422.html?tdsourcetag=s_pctim_aiomsg   为什么基于Docker搭建? 资源有 ...

  2. 基于Docker搭建MySQL主从复制

    摘要: 本篇博文相对简单,因为是初次使用Docker,MySQL的主从复制之前也在Centos环境下搭建过,但是也忘的也差不多了,因此本次尝试在Docker中搭建. 本篇博文相对简单,因为是初次使用D ...

  3. 基于 Docker 搭建 MySQL 主从复制

    本篇博文相对简单,因为是初次使用Docker,MySQL的主从复制之前也在Centos环境下搭建过,但是也忘的也差不多了,因此本次尝试在Docker中搭建. 根据网上教程走还是踩了一些坑,不过所幸最终 ...

  4. 基于Docker实现MySQL主从复制

    前言 MySQL的主从复制是实现应用的高性能,高可用的基础.对于数据库读操作较密集的应用,通过使数据库请求负载均衡分配到不同MySQL服务器,可有效减轻数据库压力.当遇到MySQL单点故障中,也能在短 ...

  5. 基于 Docker 的 MySQL 主从复制搭建

    出处:https://www.jianshu.com/p/ab20e835a73f

  6. 基于GTID模式MySQL主从复制

    基于GTID模式MySQL主从复制 GTID复制原理:基于GTID的复制是MySQL 5.6后新增的复制方式GTID (global transaction identifier) 即全局事务ID, ...

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

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

  8. Docker搭建MySQL主从复制

    Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...

  9. 基于Docker的MySql

    MySQL Server安装教程 考虑到实际情况需要经常使用MySQL,为了方便大家能够快速基于Docker搭建MySQL这里以Linux下为例 进行说明,对于Windows用户来说直接通过查看官网H ...

随机推荐

  1. Jenkins基本使用

    Jenkins安装 安装基本上属于傻瓜式安装了 选择安装路径不要包含中文 点击install 找到默认密码 选择插件安装 点击无,然后再选择安装 创建一个管理员 Jenkins配置任务 新建工程 输入 ...

  2. PhantomJS not found on PATH

    使用vue-cli创建项目后,npm init常出现以下问题:PhantomJS not found on PATH 这是因为文件phantomjs-2.1.1-windows.zip过大,网络不好容 ...

  3. 攻防世界(XCTF)逆向部分write up(一)

    晚上做几个简单的ctf逆向睡的更好 logmein elf文件 ida看看main函数伪代码 void __fastcall __noreturn main(__int64 a1, char **a2 ...

  4. vue——同一局域网内访问项目

    1.想要在手机上访问本地的vue项目,首先要保证手机和电脑处在同一局域网内(连着同一个无线网) 2.将你电脑的ip设置为固定ip(ipconfig查找本地的ip,然后修改它,改为你想变的数字) 3.在 ...

  5. 3. Rsync-远程同步(下)-企业案例

    已知3台服务器主机名分别为web01.backup .nfs主机信息见下表: 角色 外网IP(NAT) 内网IP(LAN) 主机名 WEB eth0:10.0.0.7 eth1:172.16.1.7 ...

  6. c#菜单动态合并

    说明 在程序中经常使用弹出菜单,并且一个窗体中可以存在多个弹出菜单.开发过MDI窗体的读者可能都知道,当MDI子窗体最大化时,子窗体和主窗体的菜单能够自动的合并.这是如何实现的呢?本例实现了将两个弹出 ...

  7. Eureka -- 浅谈Eureka

    目录: 一:Eureka介绍 二:Eureka架构图 三:Eureka组件 四:Eureka作用 五:Eureka和Zookeeper对比 什么是Eureka 引入SpringCloud中文文档介绍 ...

  8. 5.分析snkrs的Android的DeviceID生产规则

    分析Android的DeviceID生产 前面已经把web端的分析了一些,要想实现其实容易也难,容易是规则很容易,难是时间生成控制很难,我之前大概花了一周时间分析和梳理,然后行为测试,之前我已经讲过c ...

  9. json基本内容

    json的基本信息和历史 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于欧洲计算机协会制定的js规范的一个子集,采用完全独立于编程语言的文本格式来 ...

  10. SpringBoot配置文件之Yml语法

    一 使用 YAML 而不是 Properties YAML是 JSON 的超集,因此,它是用于指定分层配置数据的便捷格式.只要 class 路径上有SnakeYAML library,SpringAp ...