前言

Docker的安装部署&在Docker下MySQL的安装与配置

https://www.cnblogs.com/yumq/p/14253360.html

在Docker进行单机主从复制MySQL集群的搭建(与多机原理流程大差不差)

https://www.cnblogs.com/yumq/p/14253812.html

本文的实验的相关配置文件与运行指令

链接:https://pan.baidu.com/s/1Vyp_O1sAir-aqcDMJkEDNw 提取码:6666

Docker下MySQL的安装(双主双从)

创建MySQL配置文件夹

实验前应在本机的/home/目录下创建mysql文件夹

  1. # mysql1存放mastermysql1的配置文件
  2. # mysql2存放mastermysql2的配置文件
  3. # mysql3存放slavemysql1的配置文件
  4. # mysql4存放slavemysql2的配置文件
  5. sudo mkdir -p /home/mysql/docker-data/mysql1
  6. sudo mkdir -p /home/mysql/docker-data/mysql2
  7. sudo mkdir -p /home/mysql/docker-data/mysql3
  8. sudo mkdir -p /home/mysql/docker-data/mysql4

创建完成之后目录结构是这样的

在MySQL配置文件夹下创建对应的配置文件

或将我的配置文件放进去,本文操作的相关文件在本文前言,拿出来改改即可进行实验测试

mysql1目录下的my.cnf

  1. [mysqld]
  2. character_set_server=utf8
  3. init_connect='SET NAMES utf8'
  4. symbolic-links=0
  5. #驼峰命名
  6. lower_case_table_names=1
  7. #主服务器唯一ID
  8. server-id=4122
  9. #启动二进制日志
  10. log-bin=mysql-bin
  11. #设置不要复制的数据库(可以设置为多个)
  12. binlog-ignore-db=mysql
  13. binlog-ignore-db=information_schema
  14. #设置需要复制的数据库 我的是数据库叫ymq
  15. binlog-do-db=ymq
  16. #设置logbin格式 STATEMENT & ROW & MIXED
  17. binlog_format=STATEMENT
  18. # 在作为从数据库的时候,有写入操作也要更新二进制日志文件
  19. log-slave-updates
  20. #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
  21. auto_increment_increment=2
  22. #表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
  23. auto_increment_offset=1

mysql2目录下的my.cnf

  1. [mysqld]
  2. character_set_server=utf8
  3. init_connect='SET NAMES utf8'
  4. symbolic-links=0
  5. #驼峰命名
  6. lower_case_table_names=1
  7. #主服务器唯一ID
  8. server-id=4123
  9. #启动二进制日志
  10. log-bin=mysql-bin
  11. #设置不要复制的数据库(可以设置为多个)
  12. binlog-ignore-db=mysql
  13. binlog-ignore-db=information_schema
  14. #设置需要复制的数据库 我的是数据库叫ymq
  15. binlog-do-db=ymq
  16. #设置logbin格式 STATEMENT & ROW & MIXED
  17. binlog_format=STATEMENT
  18. # 在作为从数据库的时候,有写入操作也要更新二进制日志文件
  19. log-slave-updates
  20. #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
  21. auto_increment_increment=2
  22. #表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
  23. auto_increment_offset=2

mysql3目录下的my.cnf

  1. [mysqld]
  2. #主服务器唯一ID
  3. server-id=4124
  4. #启用中继日志
  5. relay-log=mysql-relay

mysql4目录下的my.cnf

  1. [mysqld]
  2. [mysqld]
  3. #主服务器唯一ID
  4. server-id=4125
  5. #启用中继日志
  6. relay-log=mysql-relay

四个配置文件中比较重要是server-id不能重复

Docker拉取 MySQL镜像

配置镜像加速器

以阿里云而言,正常拉取镜像的速度是很慢的。

这个时候就需要阿里云的法宝(容器镜像服务下的镜像加速器)

使用了加速器后,巨快无敌! 强烈推荐!



拉取MySQL5.7镜像

  1. docker pull mysql:5.7
  2. #可以查看一下镜像文件
  3. docker iamges

因为我已经拉取过了,与第一次不太一样

Docker创建对应的MySQL容器

运行下面命令创建MySQL容器

相关的配置参数解释在 https://www.cnblogs.com/yumq/p/14253360.html

安装mastermysql1

  1. docker run --name mastermysql1 -p 3306:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname mastermysql1 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql1/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql1/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql1/logs/:/var/log/mysql -d mysql:5.7

安装mastermysql2

  1. docker run --name mastermysql2 -p 3307:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname mastermysql2 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql2/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql2/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql2/logs/:/var/log/mysql -d mysql:5.7

安装slavemysql1

  1. docker run --name slavemysql1 -p 3308:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname slavemysql1 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql3/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql3/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql3/logs/:/var/log/mysql -d mysql:5.7

安装slavemysql2

  1. docker run --name slavemysql2 -p 3309:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname slavemysql2 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql4/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql4/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql4/logs/:/var/log/mysql -d mysql:5.7

安装完成后查看容器的状态

  1. #显示正在运行的容器
  2. docker ps
  3. #显示所有容器(可以查看没启动成功的容器)
  4. docker ps -a

测试mysql是否正常

以mastermysql1为例子

注意看主机名字来区分在主机还是在容器

我主机名为 ymq

mastermysql1 mastermysql2 slavemysql1 slavemysql2 表示在容器

  1. #查看容器
  2. docker ps
  3. #以交互模式进入容器命令如下
  4. docker exec -it 容器ID/容器名字 /bin/bash
  5. #进入mastermysql1 容器
  6. docker exec -it mastermysql1 /bin/bash
  7. #进入mysql 因为在创建容器是设置的密码为123456
  8. mysql -u root -p123456



成功!!你可以进入不同容器来测试!!

搭建双主双从

关系如下 ,用单机不同端口模拟多云服务器分布式场景,

如果是多个云服务器注意防火墙以及云服务器安全组相关的安全问题

编号 角色 IP地址与端口 机器名字
1 Master1 云服务器内网IP : 3306 mastermysql1
2 Slave1 云服务器内网IP : 3308 slavemysql1
3 Master2 云服务器内网IP : 3307 mastermysql2
4 Slave2 云服务器内网IP : 3309 slavemysql2

两台主机容器 都授权复制从机权限

mastermysql1 授权的角色名字slave 密码为123123

  1. GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
  2. #查看主机的状态
  3. show master status;

mastermysql2 授权的角色名字slave2 密码为123123

  1. GRANT REPLICATION SLAVE ON *.* TO 'slave2'@'%' IDENTIFIED BY '123123';
  2. #查看主机的状态
  3. show master status;

两台从机都进行同步操作

  1. #在从机上配置需要复制的主机 Slava1 复制 Master1
  2. #因为我是单机演示所以,需要给MASTER_PORT指定端口访问
  3. CHANGE MASTER TO MASTER_HOST='主机的IP地址,公网内网都行',
  4. MASTER_PORT=相应的端口,
  5. MASTER_USER='角色名称',
  6. MASTER_PASSWORD='密码',
  7. MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;

Slave1 连接 Master1

  1. #我的ip为云服务器内网IP
  2. #端口是mastermysql1容器映射在 主机的端口3306
  3. #mastermysql1 授权的用户 slave 密码为123456
  4. #mastermysql1 logbin复制文件mysql-bin.000001,复制点为443
  5. CHANGE MASTER TO MASTER_HOST='172.24.7.187',
  6. MASTER_PORT=3306,
  7. MASTER_USER='slave',
  8. MASTER_PASSWORD='123123',
  9. MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=443;
  10. #授权成功后
  11. #开启slave
  12. start slave;
  13. #查看从服务器状态
  14. show slave status\G;
  15. #如果失败可以
  16. #重置slave
  17. reset slave;
  18. #然后重新配置

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

当看到都为YES 时表示主从配置成功!

Slave2 连接 Master2

  1. CHANGE MASTER TO MASTER_HOST='172.24.7.187',
  2. MASTER_PORT=3307,
  3. MASTER_USER='slave2',
  4. MASTER_PASSWORD='123123',
  5. MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=444;
  6. #开启slave
  7. start slave;
  8. #查看从服务器状态
  9. show slave status\G;

两个主机也需要设置成对方的从机

这样两个就分为一个主机和一个备机,虽然两个都是写主机,但不能同时进行写操作。

在master1 中设置

  1. CHANGE MASTER TO MASTER_HOST='172.24.7.187',
  2. MASTER_PORT=3307,
  3. MASTER_USER='slave2',
  4. MASTER_PASSWORD='123123',
  5. MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=444;
  6. #启动两台主服务器复制功能
  7. start slave;
  8. #查看从服务器状态
  9. show slave status\G;



在master2中设置

  1. CHANGE MASTER TO MASTER_HOST='172.24.7.187',
  2. MASTER_PORT=3306,
  3. MASTER_USER='slave',
  4. MASTER_PASSWORD='123123',
  5. MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=443;
  6. #启动两台主服务器复制功能
  7. start slave;
  8. #查看从服务器状态
  9. show slave status\G;

mysql双主双从集群测试



成功!! 感谢阅读!!

在Docker下搭建MySQL双主双重集群(单机展示,与多机原理一致)的更多相关文章

  1. 基于keepalived搭建mysql双主高可用

    目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能 ...

  2. (转)基于keepalived搭建MySQL的高可用集群

    基于keepalived搭建MySQL的高可用集群  原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...

  3. keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群

    keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...

  4. linux环境下配置mysql双主复制

    简单来说,双主复制就是让两台mysql服务器中的数据保持同步,可以用来实现灾备和负载均衡 主机1 IP:192.168.200.128 主机2 IP:192.168.200.131 两台主机系统均为c ...

  5. 通过keepalived搭建MySQL双主模式的高可用集群系统

    1. 配置MySQL双主模式 1.修改my.cnf配置文件 默认情况下,MySQL的配置文件是/etc/my.cnf,在配置文件的[mysqld]段添加如下内容: server-id=1 log-bi ...

  6. MySQL 双主问题集

    最近试用MySQL高可用方案,需要配MySQL双主,对期间遇到的问题做下记录. 1.导出锁表问题 mysqldump 命令增加参数 --skip-opt -q 可避免导出时锁表: 2.导出\导入所有数 ...

  7. 基于keepalived搭建MySQL的高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  8. 利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境

    应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...

  9. Docker下配置双机热备PXC集群

    架构: 步骤: 1.安装centos7   ,设置宿主机IP:192.168.1.224 2.先更新yum软件管理器,再安装docker 1.yum -y update 2.yum install - ...

随机推荐

  1. Shell命令和流程控制[linux常用命令的使用]

    在shell脚本中使用三类命令: unix命令 概念:管道.重定向.backtick 流程控制 1 unix命令 echo "some text":在屏幕上输出信息 ls:文件列表 ...

  2. python——pandas技巧(处理dataframe每个元素,不用for,而用apply)

    用apply处理pandas比用for循环,快了无数倍,测试如下: 我们有一个pandas加载的dataframe如下,features是0和1特征的组合,可惜都是str形式(字符串形式),我们要将其 ...

  3. mybatis-generator 插件用法

    xml 配置 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE generatorCo ...

  4. 题解-FJOI2018 领导集团问题

    题面 FJOI2018 领导集团问题 给一棵树 \(T(|T|=n)\),每个点有个权值 \(w_i\),从中选出一个子点集 \(P=\{x\in {\rm node}|x\in T\}\),使得 \ ...

  5. Java集合源码分析(五)——HashMap

    简介 HashMap 是一个散列表,存储的内容是键值对映射. HashMap 继承于AbstractMap,实现了Map.Cloneable.java.io.Serializable接口. HashM ...

  6. 云服务器 ECS Linux 安装 VNC Server 实现图形化访问配置说明

    阿里云官方公共 Linux 系统镜像,基于性能及通用性等因素考虑,默认没有安装 VNC 服务组件.本文对常见操作系统下的 VNC Server 安装配置进行简要说明. 本文中仅讨论VNC的安装,关于图 ...

  7. 前端开发超好用的截图、取色工具——snipaste

    最近发现一个很好用的前端截图,取色工具,并且基本功能是免费使用的,可以提升开发效率,拿出来跟大家分享一下. 该工具主要能实现的功能就是截图,并且截图可以以窗口形式置顶在窗口: 第二个主要功能就是可以取 ...

  8. x64架构下Linux系统函数调用

    原文链接:https://blog.fanscore.cn/p/27/ 一. 函数调用相关指令 关于栈可以看下我之前的这篇文章x86 CPU与IA-32架构 在开始函数调用约定之前我们需要先了解一下几 ...

  9. kali 2020安装docker

    环境准备 kali虚拟机2020.01x64位版本 安装docker官方文档:https://docs.docker.com/engine/installation/linux/docker-ce/d ...

  10. 单身狗福利!利用java实现每天给对象发情话,脱单指日可待!

    引言 最近看到一篇用js代码实现表白的文章,深有感触. 然后发现自己也可以用java代码实现,然后就开始写代码了,发现还挺有意思的,话不多说开搞 实现思路: 使用HttpClient远程获取彩虹屁生成 ...