一、环境搭建

虚拟机环境: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. MongoDB查询操作 返回指定字段(C#官方驱动)

    首先,MongoDB中返回指定的字段的查询方法如下: db.person.find({Name:"小丑"},{Age:1,Sex:1}) 该语句表示:查询person表中name为 ...

  2. 15 Django之Celery发送邮件

    异步任务--celery发送邮件 安装两个python包: pip install celery==3.1.25 pip install django-celery==3.2.1 pip instal ...

  3. 关于微信小程序中的样式使用变量值的方法

    在开发过程中,通常碰到样式非固定的情况,这时候就要使用变量来规定样式,例如,一个view的宽度需要使用变量: 1. 在wxss中,定义变量:width:var(--width--); 2. 在js中, ...

  4. python生成式:列表、字典、集合

    python的3类生成式: 列表生成式 字典生成式 集合生成式 1.python列表生成式 my_data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(&quo ...

  5. WPF - 仿QQ2014

    声明:非原创.项目是网上发现的,以学习为目的重写了部分代码,合理地调整了下布局,巧妙地简化了下Style样式.重写还算是有价值的,并非完全复制. 效果: 获取项目源码:https://pan.baid ...

  6. linux centos常用命令

    mkdir 创建文件夹 -Z:设置安全上下文,当使用SELinux时有效: -m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限: -p或--parents ...

  7. C# Winfrom TabControl美化

    实例一: using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; na ...

  8. D. Connected Components Croc Champ 2013 - Round 1 (并查集+技巧)

    292D - Connected Components D. Connected Components time limit per test 2 seconds memory limit per t ...

  9. redis + boost.asio

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  10. 【洛谷P2480】古代猪文

    题目大意:求 \[ G^{\sum\limits_{d|N}\binom{n}{k}} mod\ \ 999911659 \] 题解:卢卡斯定理+中国剩余定理 利用卢卡斯定理求出指数和式对各个素模数的 ...