docker下实现MySQL的主从复制(最完整的教程保姆级教程)


在docker环境下实现MySQL的主从复制(以MySQL5.7为例,前提条件:要已经懂了什么是MySQL主从复制):(写在最前面:先看最后一处)

1.新建主服务器容器实例端口为:3307执行指令:

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

指令解析:

docker run -p 3307:3306 --name mysql-master \”

使用docker run指令 -p映射端口,外部的端口改为3307作为主库的入口,并且主库命名为mysql-master;

“-v /mydata/mysql-master/log:/var/log/mysql \”,

“-v /mydata/mysql-master/data:/var/lib/mysql \”,

“-v /mydata/mysql-master/conf:/etc/mysql \”

指令使用数据卷进行转储到宿主机;

“ -e MYSQL_ROOT_PASSWORD=root \

  -d \

  mysql:5.7

”指令设置环境变量并在后台运行mysql:5.7;


2.记得查看docker ps进程是否已经起来了;


3.进入:/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

## 设置使用的二进制日志格式

binlog_format=mixed

## 二进制日志文件过期清理时间

expire_logs_days=7

## 跳过主从复制中遇到的错误避免复制中断,例如1062错误等

slave_skip_errors=1062

添加完配置后记得重启主库容器方便同步到docker内的mysql-master的配置文件:指令:docker restart mysql-master


4.进入mysql-master容器:

docker exec -it mysql-master /bin/bash

进入容器之后登录到数据库:

mysql -uroot -p


5.创建授权用户:

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

6.创建从服务器端口为3308:

指令:

docker run -p 3308:3306 --name mysql-slave \

-v /mydata/mysql-slave/log:/var/log/mysql \

  -v /mydata/mysql-slave/data:/var/lib/mysql \

  -v /mydata/mysql-slave/conf:/etc/mysql \

  -e MYSQL_ROOT_PASSWORD=root \

  -d \

  mysql:5.7

记得查看docker ps确定启动了容器


7.进入/mydata/mysql-slave/conf创建my.cnf:

配置如下内容:

======不要手打,直接复制=======

[mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=102

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql

## 开启二进制日志功能

log-bin=mall-mysql-slave1-bin

## 设置二进制日志文件使用的内存大小

binlog_cache_size=1M

## 设置使用的二进制日志格式

binlog_format=mixed

## 二进制日志文件过期清理时间

expire_logs_days=7

## 跳过主从复制中遇到的错误避免复制中断,例如1062错误等

slave_skip_errors=1062

## relay_log配置中断日志

relay_log=mall-mysql-relay-bin

## log_slave_updates表示slave将复制事件写入自己的二进制日志

log_slave_updates=1

## slave设置为只读

read_only=1

修改完配置之后记得重启mysql-slave容器

docker restart mysql-slave

别忘了确定一下是否确定重启了!!!


8.进入到主数据库查看主从同步状态(show master status;):

-----插入图片

df160cac9e654156ac03f996526387c3.png


9.进入到mysql-slave容器:

设置一系列参数指令:

change master to master_host='192.168.40.144',master_user='slave',master_password='root',master_port=3307,master_log_file='mall-mysql-bin.000001',master_log_pos=863,master_connect_retry=30;

-----插入图片

38b2df6d565342dbae53b375083d91bc.png

参数解析:

master_host:主数据库的IP地址

master_port:主数据库的运行端口

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

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

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

Master_log_pos:指定从数据库从那开始复制数据,通过查看主数据库状态获取position

------插入图片

c6e6edc78fc24b048dbbedce289abbd3.png

Master_connect_retry:连接失败重试的时间间隔单位为秒


10.在从数据库中查看主从复制状态(在从数据库中)

这里图片只显示了一部分:但已经足够了,我们看到:

Slave_io_running和slave_sql_running都是NO

-----插入图片

7d75ec08f72642838086023b67b32509.png


11.在从数据库中开启主从同步(在从数据库中)

start slave;


12.查看从数据库状态发现已经同步:

继续执行指令(在从数据库中):

Show slave status \G;

-----插入图片

efdd97fe77444207a97efffbe4e1c1e8.png

发现Slave_io_running和slave_sql_running都是YES

说明主从复制创建成功!


假如你的出现了:Slave_io_running是connecting,slave_sql_running是YES

----插入图片

ca1cd373f2264dc9bf37efaa2c05e80e.png

那你可以在主数据库中执行:
 

ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

-----插入图片

927c5c0a8c98407796a279a6301586a7.png

在重新启动slave容器:

----插入图片

cfc6af51aa044447b2427efc54fb69ac.png

再查看进都变成了,yes


假如你的出现了No:

----插入图片

ebd468d090e2466486f987de9de76e76.png

先停止你的IO:

STOP SLAVE IO_THREAD;

查看主库的状态是否发生变化:注意更改

-----插入图片

9dd1c690cb234f23a9b43bff86c8643c.png

change master to master_host='192.168.40.144',master_user='slave',master_password='root',master_port=3307,master_log_file='mall-mysql-bin.000002',master_log_pos=154,master_connect_retry=30;

再进行指令(从库中执行stop slave;reset slave;start slave;):

------插入图片

cfecf478069248dbbe19b87ccdee9ed1.png


注意:写在最后:注意打开防火墙的特定端口并重启docker(可以提前做):

-----插入图片

26772e6effc248f098bf1de7a3e82370.png

 如果在操作的过程中遇到任何问题欢迎在评论区留言,看到必回!如果有其他问题也可以打在评论区!

5a8e06a4fef74de9b741a945b8c79f35.png

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值