自动化部署mysql主从复制集群_使用docker部署mysql主从复制集群

一、环境搭建

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

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

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

5d8abeb1a894b01c1b7a3ecf381b8a34.png

二、配置mysql-master

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

[mysqld]

server-id=3307##自定义id号,不要重

log-bin=mysql-bin ##开启二进制日志

d855d80c820c5804b6bd3c5cbcb36a16.png

6f52f9791a2ad9605dcedcea97eee99d.png

76fad276e04be0830164c9836241ac4b.png

54868162520f93ad6ed9220ffebcf029.png

注意:在使用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

5b11cf2890aff42c78eeccb8330226ad.png

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

CREATE USER 'slave'@'%' IDENTIFIED BY '123abc'; ##用户名是slave,密码是123abc

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON*.* TO 'slave'@'%'; ##指定访问权限

19f82594ce0aff2de023b0b79c6022aa.png

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

467aef7327ff112f34e25da5166b4ed9.png

到这里,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 ##配置中继日志

27c97b3b8b4fc447fee8710745c9d060.png

然后是重启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;

6565edbfe6df7802ac288d4a43fed6cc.png

查看连接状态

show slave status \G;

2fb3c94d1a40eb03f678d93836b5b68e.png

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

start slave;

show slave status \G;

bb741b9bc76a03f1bde8344c73662d41.png

f809eaf70b3925022bcbcb0ef81dc80e.png

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

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;

c76606c761aee55e1d99f10b4d69a9b3.png

076755695100fcf45cf6f5d2653b7ce9.png

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

mysql-slaver2配置相同。

四、测试

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

create database test charset utf8;

use test;

create table user(idint(11),name varchar(255))charset utf8;

insert into user(id,name) values(100,'tom'),(101,'jerry');

b40e0cbc6808d3b132b48c46951d913a.png

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

faa7eb9d841e3aa0d99901db9bd61ab3.png

五、说明一下

1. mysql是按/etc/my.cnf

-> /etc/mysql/my.cnf

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

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

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

2. 集群结构

5c7ebf749ad330be21201d5dcf5f4e83.png

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

也可以使用串行结构

90ef5365c72e444dc4f93e85df751fac.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值