码迷,mamicode.com
首页 > 数据库 > 详细

使用docker部署mysql主从复制集群

时间:2019-06-21 12:49:43      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:value   int   relay   部署   中继   mamicode   情况   插入数据   sql   

一、环境搭建

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

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

docker pull mysql:5.7

docker run -p 3307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
docker run -p 3308:3306 --name mysql-slaver1 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
docker run -p 3309:3306 --name mysql-slaver2 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7

 技术图片

 二、配置mysql-master

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

[mysqld]
server-id=3307  ##自定义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=3308  ##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=3307, master_log_file=mysql-bin.000001, master_log_pos= 789, master_connect_retry=30;

技术图片

查看连接状态

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=3307, master_log_file=mysql-bin.000001, master_log_pos= 789, master_connect_retry=30;
start slave;
show dlave status \G;

技术图片

技术图片

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

mysql-slaver2配置相同。

四、测试

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

create database test charset utf8;
use test;
create table user(id int(11),name varchar(255))charset utf8;
insert into user(id,name) values(100,tom),(101,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的相关信息

 

使用docker部署mysql主从复制集群

标签:value   int   relay   部署   中继   mamicode   情况   插入数据   sql   

原文地址:https://www.cnblogs.com/wwzyy/p/11060400.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!