mysql5.7主从复制配置

写在最前面:一入编程深似海,从此对象变路人(码农没时间谈恋爱)。很长一段时间连写个文章的时间都没有了,学完后端、学前端,前端刚入门又要搞容器化,这真是“一重山外一重关,关关难过若山海”。

好了,废话不多数下面进入正题。

主从复制原理这里就不多说了,既然都已经开始看配置了就肯定了解过它的原理和用途了。

注:本文基于ubuntu20.04系统、docker、mysql5.7进行,请自行准备

1. 新建主服务容器实例

docker run -p 3307:3306 --name mysql-master -v /home/mydata/mysql-master/log:/var/log/mysql -v /home/mydata/mysql-master/data:/var/lib/mysql -v /home/mydata/mysql-master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

因为我的宿主机已经占用了3306端口,所以用3307映射主服务端口

2.主服务配置文件

找到我们命令中设置的数据卷映射地址 /home/mydata/mysql-master/conf新建my.cnf文件

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

配置完成重启mysql-master服务

docker restart mysql-master

重启完成容器仍然获取,那么我们的配置应该没什么问题。 

3.创建数据同步用户

执行命令:docker exec -it mysql-master /bin/bash 进入master容器登录数据库如下图:

 执行下面命令创建数据同步用户slave,并授权

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

 4.新建从服务容器实例

docker run -p 3308:3306 --name mysql-slave -v /home/mydata/mysql-slave/log:/var/log/mysql -v /home/mydata/mysql-slave/data:/var/lib/mysql -v /home/mydata/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

同主服务容器一样只是端口采用3308映射

5.从服务配置文件

找到我们命令中设置的数据卷映射地址 /home/mydata/mysql-slave/conf新建my.cnf文件 

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

 然后重启从服务容器

docker restart mysql-slave

6.在从服务中配置主从复制

执行命令:docker exec -it mysql-slave /bin/bash 进入从服务容器,登录数据库如下图

执行下述命令修改主从复制配置,注意master_host,master_log_pos记得改成你的

change master to master_host='192.168.0.33', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;

参数说明:

master_host:主数据库的IP地址;

master_port:主数据库的运行端口;

master_user:在主数据库创建的用于同步数据的用户账号;

master_password:在主数据库创建的用于同步数据的用户密码;

master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;

master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;

master_connect_retry:连接失败重试的时间间隔,单位为秒。 

master_jog_pos在主服务执行show master status;查看,如下:

 7.查看主从复制状态

在从服务中执行命令:show slave status \G;

上面看到被标注的两行是NO,接下来我们开启主从同步

start slave;

 接下来再查看状态,两个都编程Yes就成功了

8.主从复制测试

我们进入到主服务容器登录mysql,新建库、表并插入一条数据

这里我们看到在master数据库中新建了test库、user表并插入了一条数据,接下来我们直接去slave服务数据库查看是否有他们。

从数据库中也有了这些数据,恭喜各位,大功告成!!!

本文借鉴B站《尚硅谷Docker实战教程(docker教程天花板)》P41

声明我不是推广视频的啊,就是觉得他讲的挺好的,好东西大家就要分享嘛!

写在最后:无论是在上学还是已经工作,学一个东西一定要去实践,这样我们才能真正学会并且掌握它。学习工作之余也要多做活动,毕竟身体是革命的本钱。与君共勉!!! 

 欢迎关注wx公众号:python web小栈,共同探讨学习

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值