基于Docker搭建MySQL主从复制--入门

基础环境
1.一台装有Centos的虚拟机
2.docker容器
3.mysql镜像

安装docker

执行命令

yum install docker

成功后输入,出现下图安装成功在这里插入图片描述
启动Docker
启动Docker并设置为开机自启动

systemctl  start docker.service
systemctl  enable docker.service

安装MySQL
使用Docker拉取MySQL镜像

docker pull mysql:5.7.13

运行主容器

docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13

–name 为容器指定名称,这里是master

-p 将容器的指定端口映射到主机的指定端口,这里是将容器的3306端口映射到主机的3306端口

-e 设置环境变量,这里是指定root账号的密码为root

-d 后台运行容器,并返回容器ID

mysql:5.7.13 指定运行的mysql版本

检验是否启动成功
docker ps -a 显示所有的容器,包括未运行的(我这里已经下好了两台)
在这里插入图片描述
使用Navicat连接测试
在这里插入图片描述执行SQL

GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'backup';
show grants for 'backup'@'%';

出现如下信息表示授权成功
在这里插入图片描述
这里账号指的是从机使用的账号,通过这个账号去连接主机,也可以直接使用root账号

修改MySQL配置环境
创建配置文件目录
目录结构如下

/usr/local/mysql/master

/usr/local/mysql/slave1

拷贝一份MySQL配置文件

 docker cp master:/etc/mysql/my.cnf /usr/local/mysql/master/my.cnf

进到master目录下,已存在拷贝的my.cnf

log-bin=mysql-bin
server-id=1

log-bin=mysql-bin 使用binary logging,mysql-bin是log文件名的前缀
server-id=1 唯一服务器ID,非0整数,不能和其他服务器的server-id重复

将修改后的文件覆盖Docker中MySQL中的配置文件

docker cp /usr/local/mysql/master/my.cnf master:/etc/mysql/my.cnf

重启 mysql 的docker , 让配置生效

docker restart master

启动后,重新测试连接,连接成功表示主容器配置成功

运行MySQL从容器
首先运行从容器

docker run --name slave1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13

与主容器相似,拷贝配置文件至slave1目录修改后覆盖回Docker中

log-bin=mysql-bin
server-id=2

别忘记,重启slave1容器,使配置生效

配置主从复制
使用Navicat连接slave1后新建查询,执行以下SQL

CHANGE MASTER TO 
MASTER_HOST='ip',
MASTER_PORT=3306,
MASTER_USER='backup',
MASTER_PASSWORD='backup';

START SLAVE;
MASTER_HOST 填Navicat连接配置中的ip应该就可以

MASTER_PORT 主容器的端口

MASTER_USER 同步账号的用户名

MASTER_PASSWORD 同步账号的密码

检查是否配置成功
show slave status;
在这里插入图片描述
在这里插入图片描述

CHANGE MASTER TO
MASTER_HOST=‘连接Navicat的ip’,
MASTER_PORT=正确的端口,
MASTER_USER=‘正确的用户名’,
MASTER_PASSWORD=‘正确的密码’;

START SLAVE;
接着上文,我们说成功一半,并没有说成功了,那么另一半在于Slave_IO_Running与Slave_SQL_Running

如果都是Yes,那么恭喜你,可以测试主从复制的效果了,如果有一个不是Yes,一半是重启从容器后,事务回滚引起的,那么给出解决方法如下

stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave ;

执行后,再次观察三个关键字段应该就都没问题了

测试主从复制
首先,在主实例中创建一个测试数据库打开(刷新)从实例,可见test库已存在在test库中创建一个表t_test,添加一个id测试字段向表中添加几个数据刷新从库,可见t_test表及其中1、2、3、4数据已存在至此,一个具备主从复制的一主两从的MySQL就已搭建完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值