一、环境搭建

虚拟机环境:centos7 IP:192.168.37.134  用户名:root   密码:

启动3个容器,一个是master,端口是3307,另外两个是slaver,端口是3308和3309

docker pull mysql:5.7

docker run -p : --name mysql-master -e MYSQL_ROOT_PASSWORD= -d mysql:5.7
docker run -p : --name mysql-slaver1 -e MYSQL_ROOT_PASSWORD= -d mysql:5.7
docker run -p : --name mysql-slaver2 -e MYSQL_ROOT_PASSWORD= -d mysql:5.7

 二、配置mysql-master

进入mysql-master容器,修改/etc/mysql/my.cnf,添加

[mysqld]
server-id= ##自定义id号,不要重
log-bin=mysql-bin ##开启二进制日志

注意:在使用vim时,可能会出现not found,需要apt-get install vim

修改好my.cnf后,需要重启一下mysql,重启一下mysql-master容器,重新进入容器

service mysql restart
docker start mysql-master
docker exec -it mysql-master /bin/bash

进入容器后,登录mysql,为slaver分配一个账号

CREATE USER 'slave'@'%' IDENTIFIED BY '123abc';  ##用户名是slave,密码是123abc
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; ##指定访问权限

查看当前主机状态,注意:查看完状态后就不要再进行其他的操作了,slaver会引用mster的Position编码,每次操作Position都会变。

到这里,master就配置完成了,等待slaver的连接。

 三、配置mysql-slaver

以mysql-slaver1为例

进入容器和配置master一样

修改/etc/mysql/my.cnf文件,添加

[mysqld]
server-id= ##id号,自定义,不要重就行
log-bin=mysql-slave-bin ##开启二进制日志功能
relay_log=edu-mysql-relay-bin ##配置中继日志

然后是重启mysql,重启容器,重新进入容器,登录mysql进行下一步配置

service mysql restart
docker start mysql-slaver1
docker exec -it mysql-slaver2 /bin/bash
mysql -u root -p

执行命令进行master的连接,需要配置master的ip,用户名,密码,日志文件和当前版本号

change master to master_host='192.168.37.134', master_user='slave', master_password='abc123', master_port=, master_log_file='mysql-bin.000001', master_log_pos= , master_connect_retry=;

查看连接状态

show slave status \G;

可以看到当前状态是未开启主从复制,接下来开启,再查看状态

start slave;
show slave status \G;

当看到这个的时候,说明我们的配置出现了问题,原因是密码写错了,出现这种情况一般就是在连接配置的时候出现了问题。现在改回来重新执行如下代码

stop slave;  #修改之前需要先stop一下
change master to master_host='192.168.37.134', master_user='slave', master_password='123abc', master_port=, master_log_file='mysql-bin.000001', master_log_pos= , master_connect_retry=;
start slave;
show dlave status \G;

当看到两个Yes的时候,说明slave配置成功了,并且已经开启了主从复制。

mysql-slaver2配置相同。

四、测试

mysql-master上创建一个数据库,创建表,插入数据

create database test charset utf8;
use test;
create table user(id int(),name varchar())charset utf8;
insert into user(id,name) values(,'tom'),(,'jerry');

在其中一台mysql-slaver1上查看数据

五、说明一下

1. mysql是按/etc/my.cnf

-> /etc/mysql/my.cnf

-> /usr/local/mysql/etc/my.cnf

-> ~/.my.cnf的顺序读取配置文件的。

如果几个配置文件中都有相同的参数,mysql会以读取的最后一个文件配置参数为准。

2. 集群结构

当前的结构是slaver1和slaver2作为master的从机,需要在slaver1和slaver2上配置master的相关信息。

也可以使用串行结构

只不过是slaver2把slaver1认为是master,配置的是slaver1的相关信息

在spring项目中,可以配置两个数据源,一个读,一个写。然后DAO层的类分别注入不同的数据源,产生读的bean和写的bean,service调用的时候注入指定的bean就可以啦。

使用docker部署mysql主从复制集群的更多相关文章

  1. Kubernetes 部署Mysql 主从复制集群

    Mysql主从参考文章: https://www.jianshu.com/p/509b65e9a4f5 http://blog.51cto.com/ylw6006/2071864 Statefulse ...

  2. 手把手教你用Docker部署一个MongoDB集群

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的.支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引 ...

  3. Docker 部署 RocketMQ Dledger 集群模式( 版本v4.7.0)

    文章转载自:http://www.mydlq.club/article/97/ 系统环境: 系统版本:CentOS 7.8 RocketMQ 版本:4.7.0 Docker 版本:19.03.13 一 ...

  4. 基于Docker的Mysql Cluster集群

    参考 mysql-cluster镜像 https://medium.com/@ahmedamedy/mysql-clustering-with-docker-611dc28b8db7 使用Docker ...

  5. docker部署Ceph分布式存储集群

    1.环境准备 3台virtualbox虚拟机,用来安装ceph集群,已用docker-machine安装上了docker,每台虚拟机虚拟创建一个5G的硬盘,用于存储osd数据,例如:/dev/sdb ...

  6. docker 部署 HFish(集群部署)

    主节点部署: docker run -d --name hfish-master -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : ...

  7. docker中mysql pxc集群

    PXC集群 https://hub.docker.com/r/percona/percona-xtradb-cluster 安装PXC镜像 下载镜像或者导入本地镜像 docker pull perco ...

  8. Linux Centos7 环境搭建Docker部署Zookeeper分布式集群服务实战

    Zookeeper完全分布式集群服务 准备好3台服务器: [x]A-> centos-helios:192.168.19.1 [x]B-> centos-hestia:192.168.19 ...

  9. Docker搭建MySQL主从集群,基于GTID

    写在前边 搭建MySQL读写分离主从集群,这里未使用binlog方式,使用的是GTID方式 源码见我的Github https://github.com/hellxz/mysql-cluster-do ...

随机推荐

  1. SQL连接(join)

    INNER JOIN:如果表中有至少一个匹配,则返回行 LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行 FULL JOIN ...

  2. 微信小程序wxs如何使用

    新建一个.wxs文件 <!-- 引入.wxs文件 src为相对路径,module指定当前模块的名称 --> <wxs module="filter" src=&q ...

  3. 如何部署struts开发环境

    1 首先登陆http://archive.apache.org/dist/struts/source/页面,会看到struts的下载页面 2 下载struts的最新版本struts2-2.2.1-sr ...

  4. ASP.NET如何接收清楚缓存的通知

    1 如果使用cache的add方法或者接受CacheItemPriority值得Insert方法重载接收通知,可以提供CacheItemRemovedCallBack对象,选择在清除对象时接收通知 u ...

  5. 【Git】三、版本回退&撤消修改&文件删除

    提要 //查看git操作日志 $ git log //单行格式查看操作日志 $ git log --pretty=oneline //还原操作到上一次版本,有几个^就上几次 $ git reset - ...

  6. 微信小程序开发(七)获取手机网络类型

    // succ.wxml <view>手机网络状态:{{netWorkType}}</view> // succ.js var app = getApp() Page({ da ...

  7. 11_Hive TransForm 案例

    1.需求:将Json格式的数据处理后插入新表中 数据文件如下:rating.json,文件格式:{"movie":"2858","rate" ...

  8. confluence配置搭建

    1.环境准备:需要安装jdk.需要mysql5.7数据库,创建数据库confluence并创建用户和密码 CREATE DATABASE `confluence` DEFAULT CHARACTER ...

  9. CodeForces 839B - Game of the Rows | Codeforces Round #428 (Div. 2)

    血崩- - /* CodeForces 839B - Game of the Rows [ 贪心,分类讨论] | Codeforces Round #428 (Div. 2) 注意 2 7 2 2 2 ...

  10. nginx之location部署yii项目(不使用nginx端口转发)

    前言: 之前部署yii项目的时候, 使用的是域名, 后来使用nginx进行端口转发(反向代理)来部署yii项目. 这一次部署尝试只使用location 进行部署(不需要使用端口). 先贴出nginx的 ...