Docker实战之MySQL主从复制
前言
曾几何时,看着高大上的架构和各位前辈高超的炫技,有没有怦然心动,也想一窥究竟?每当面试的时候,拿着单应用的架构,吹着分库分表的牛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.Mysql集群------Docker下的Mysql主从复制
前言: 实话说,我想做的是Mysql集群架构. 我的计划是: 1.实现Docker下的Mysql主从复制 2.实现MyCat基于Mysql的读写分离 3.实现MyCat的分库分表 4.实现pxc集群 ...
- 如何利用docker快速构建MySQL主从复制环境
在学习MySQL的过程中,常常会测试各种参数的作用.这时候,就需要快速构建出MySQL实例,甚至主从. 考虑如下场景: 譬如我想测试mysqldump在指定--single-transaction参数 ...
- docker上配置mysql主从复制
1.在docker上启动2台mysql容器:(这里3306为主,3307为从) docker run -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 - ...
- 基于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 ###我用的是 ...
- docker 容器的mysql主从复制
一. 1.首先拉取docker镜像,我们这里使用5.7版本的mysql: docker pull mysql:5.7 2.分别启动主从两个容器: docker run -p 3339:3306 - ...
- Docker实战之Redis-Cluster集群
概述 接上一篇Docker实战之MySQL主从复制, 这里是Docker实战系列的第二篇,主要进行Redis-Cluster集群环境的快速搭建.Redis作为基于键值对的NoSQL数据库,具有高性能. ...
- Docker实战之Consul集群
前言 最近参加了几场 Java 面试,发现大多数的微服务实践还是 Eureka 偏多,鉴于笔者的单位选型 Consul,这里对 Consul 做简单总结. 该篇是 Docker 实战系列的第三篇.传送 ...
- Docker容器启动Mysql,Docker实现Mysql主从,读写分离
Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...
- 实战-Mysql主从复制
前言: Mysql内建的复制功能是构建大型高性能应用程序的基础.由于目前mysql的高可用性架构MMM和MHA均建立在复制的基础之上,本文就mysql主从复制进行实战描述,希望对读者提供帮助.之前 服 ...
随机推荐
- sqlalchemy 入门
ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上. 在Python中,最有名的ORM框架是SQLAlchemy. # 导入: from sqlalche ...
- 吴裕雄--天生自然 pythonTensorFlow自然语言处理:交叉熵损失函数
import tensorflow as tf # 1. sparse_softmax_cross_entropy_with_logits样例. # 假设词汇表的大小为3, 语料包含两个单词" ...
- Halcon系列(1) 菜鸟入门
官方网站怎么使用HDevelop :https://www.mvtec.com/products/halcon/halcon-tour
- [概率DP]相逢是温厚
题意 有\(n\)场比赛,他每次等概率地选择一场,选择的比赛可能有没ac过的题,他一定会ac这次比赛中的某一道,并说我好菜啊.如果全ac过了,也会说我好菜啊.求期望说多少次我好菜啊. 注意题目中每场题 ...
- 学习ECC及Openssl下ECC生成密钥的部分源代码心得
一.ECC的简介 椭圆曲线算法可以看作是定义在特殊集合下数的运算,满足一定的规则.椭圆曲线在如下两个域中定义:Fp域和F2m域. Fp域,素数域,p为素数: F2m域:特征为2的有限域,称之为二元域或 ...
- The Five-Number Summary|Boxplots
3.3 The Five-Number Summary; Boxplots the deciles divide a data set into tenths (10 equal parts), th ...
- Struts2加载自定义库注意事项
新建Struts2项目,添加Struts2的jar包时,往往通过导入自定义库的方式,导入自定义库时,有个地方必须要设置,否则项目无法正常执行,如图所示: 必须要按照上述方式对自定义库进行加载!
- 吴裕雄--天生自然python学习笔记:pandas模块导入数据
有时候,手工生成 Pandas 的 DataFrame 数据是件非常麻烦的事情,所以我们通 常会先把数据保存在 Excel 或数据库中,然后再把数据导入 Pandas . 另 一种情况是抓 取网页中成 ...
- highcharts 设置柱子之间的距离 柱子宽度
plotOption : { column : { // 设置每个柱自身的宽度 pointWidth : // x轴每个点只用一个柱,则这个属性设置的是相邻的两个点的柱之间的间距. // 如果x轴每个 ...
- rocket mq 入门文档
原文地址: http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/ 感谢原作者 十分钟入门RocketMQ 本文首先引出 ...