前言

曾几何时,看着高大上的架构和各位前辈高超的炫技,有没有怦然心动,也想一窥究竟?每当面试的时候,拿着单应用的架构,吹着分库分表的牛X,有没有心里慌的一批?

其实很多时候,我们所缺少的只是对高大上的技术的演练。没有相关的业务需求,没有集群环境,然后便只是Google几篇博文,看下原理,便算是了解了。然而真的明白了吗?众多的复制粘贴中,那篇文章才对我们有用,哪些又是以讹传讹?

所幸容器技术的快速发展,让各种技术的模拟成为现实。接下来Docker相关的一系列文章,将以实战为主,帮助大家快速搭建测试和演练环境。

Docker文件编排

由于是测试为了演练用,这里用docker-compose进行配置文件的编排,实际的集群环境中并不是这么部署的。

**1. **编排docker-compose-mysql-cluster.yml,安装master和slave节点

version: '3'
services:
mysql-master:
image: mysql:5.7
container_name: mysql-master
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3307:3306"
volumes:
- "./mysql/master/my.cnf:/etc/my.cnf"
- "./mysql/master/data:/var/lib/mysql"
links:
- mysql-slave mysql-slave:
image: mysql:5.7
container_name: mysql-slave
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3308:3306"
volumes:
- "./mysql/slave/my.cnf:/etc/my.cnf"
- "./mysql/slave/data:/var/lib/mysql"

2. 配置master配置文件my.cnf

[mysqld]
# [必须]启用二进制日志
log-bin=mysql-bin
# [必须]服务器唯一ID,默认是1,一般取IP最后一段
server-id=1
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql

**3. **配置slave配置文件my.cnf

[mysqld]
# [必须]服务器唯一ID,默认是1,一般取IP最后一段
server-id=2

**4. **启动docker-compose,创建docker镜像文件

docker-compose -f docker-compose-mysql-cluster.yml up -d

docker ps查看进程,可以看到2个实例已启动。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
1f4ad96b4d5e mysql:5.7 "docker-entrypoint.s…" 48 seconds ago Up 46 seconds 33060/tcp, 0.0.0.0:3307->3306/tcp mysql-master
8e2214aacc43 mysql:5.7 "docker-entrypoint.s…" 49 seconds ago Up 47 seconds 33060/tcp, 0.0.0.0:3308->3306/tcp mysql-slave

配置主从复制

1. 配置master

2. 配置slave

这时候就可以运行一些 SQL 语句来验证同步服务是否正常了。

验证主从复制

**1. **master创建db

**2. **查看slave是否同步创建

由结果可知,已完成MySQL主从复制环境的搭建。

读写分离

MySQL主从复制是其自己的功能,实现读写分离就得依靠其他组件了,比如sharding-jdbc。但是sharding-jdbc只是实现读写分离,本身的权限控制还是需要MySQL这边来配置的。

**1. **配置master账户及权限

创建帐号并授予读写权限

CREATE USER 'master'@'%' IDENTIFIED BY 'Password123';
GRANT select,insert,update,delete ON *.* TO 'master'@'%';
flush privileges;

**2. **配置slave账户及权限

创建帐号并授予只读权限

use mysql;
CREATE USER 'slave'@'%' IDENTIFIED BY 'Password123';
GRANT select ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;

最后

这篇文章以搭建环境为主,后续会继续完善故障转移、分库分表、数据平滑迁移等相关演练。菜鸟博客,不尽完善,希望大家不吝赐教。

公众号 【当我遇上你】

Docker实战之MySQL主从复制的更多相关文章

  1. 1.Mysql集群------Docker下的Mysql主从复制

    前言: 实话说,我想做的是Mysql集群架构. 我的计划是: 1.实现Docker下的Mysql主从复制 2.实现MyCat基于Mysql的读写分离 3.实现MyCat的分库分表 4.实现pxc集群 ...

  2. 如何利用docker快速构建MySQL主从复制环境

    在学习MySQL的过程中,常常会测试各种参数的作用.这时候,就需要快速构建出MySQL实例,甚至主从. 考虑如下场景: 譬如我想测试mysqldump在指定--single-transaction参数 ...

  3. docker上配置mysql主从复制

    1.在docker上启动2台mysql容器:(这里3306为主,3307为从) docker run -d  -e MYSQL_ROOT_PASSWORD=123456  -p 3306:3306 - ...

  4. 基于Docker Compose搭建mysql主从复制(1主2从)

    系统环境 * 3 Ubuntu 16.04 mysql 8.0.12 docker 18.06.1-ce docker-compose 1.23.0-rc3 *3 ==> PS  ###我用的是 ...

  5. docker 容器的mysql主从复制

    一. 1.首先拉取docker镜像,我们这里使用5.7版本的mysql:   docker pull mysql:5.7 2.分别启动主从两个容器: docker run -p 3339:3306 - ...

  6. Docker实战之Redis-Cluster集群

    概述 接上一篇Docker实战之MySQL主从复制, 这里是Docker实战系列的第二篇,主要进行Redis-Cluster集群环境的快速搭建.Redis作为基于键值对的NoSQL数据库,具有高性能. ...

  7. Docker实战之Consul集群

    前言 最近参加了几场 Java 面试,发现大多数的微服务实践还是 Eureka 偏多,鉴于笔者的单位选型 Consul,这里对 Consul 做简单总结. 该篇是 Docker 实战系列的第三篇.传送 ...

  8. Docker容器启动Mysql,Docker实现Mysql主从,读写分离

    Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...

  9. 实战-Mysql主从复制

    前言: Mysql内建的复制功能是构建大型高性能应用程序的基础.由于目前mysql的高可用性架构MMM和MHA均建立在复制的基础之上,本文就mysql主从复制进行实战描述,希望对读者提供帮助.之前 服 ...

随机推荐

  1. windows下使用vs code调试简单的C程序

    常使用visual studio code(vs code)打开.c文件,如果让vs code具备调试技能估计会比较有用 准备工作: 1. vs code安装插件:cpptools 2. window ...

  2. 共享出行疯狂并购背后,打造全交通链条才能让Uber们更快乐

    一直以来,携程.滴滴.摩拜等与出行相关的企业总是会因各种负面问题而饱受诟病.但不能否认的是它们极大地提升了出行便利性,让人们的出行更有效率,也更加方便.而与此同时,Uber.Lyft.滴滴等共享打车企 ...

  3. Opencv笔记(十六)——认识轮廓

    什么是轮廓? 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.轮廓在形状分析和物体的检测和识别中很有用.谈起轮廓不免想到边缘,它们确实很像.简单的说,轮廓是连续的,边缘并 ...

  4. 【线段树】Interval GCD

    题目描述 给定一个长度为N的数列A,以及M条指令 (N≤5*10^5, M<=10^5),每条指令可能是以下两种之一: "C l r d",表示把 A[l],A[l+1],- ...

  5. Kruskal算法详解

    本章介绍克鲁斯卡尔算法.和以往一样,本文会先对克鲁斯卡尔算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 最小生成树 在含有n个顶点的连通图中选择n-1条边, ...

  6. 吴裕雄--天生自然C语言开发:约瑟夫生者死者小游戏

    个人在一条船上,超载,需要 人下船. 于是人们排成一队,排队的位置即为他们的编号. 报数,从 开始,数到 的人下船. 如此循环,直到船上仅剩 人为止,问都有哪些编号的人下船了呢? #include&l ...

  7. git 首次提交

    git init# 将本地仓库与码云远程仓库进行关联 git remote add origin git的url地址 git add . git commit -m "描述" # ...

  8. LinkedList源码剖析

    LinkedList简介 LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈.队列和双端队列来使用. LinkedList同样是非线程安全 ...

  9. OneDrive for Business

    一.界面介绍 1.在Office 365主页 点击“OneDrive”登陆 2.进入OneDrive,可对文档进行存储.同步并共享文档. 3.点击,可对文档进行编辑.分享.重命名等操作 二.文档同步 ...

  10. 听《Sara》

    Sara这首歌太好听了,虽然没有清楚具体是唱什么,但我感觉是讲一个故事,很好奇,我找到了歌词. Sara 塞拉 鲍勃迪伦 I laid on a dune, I looked at the sky, ...