Docker搭建Mysql主从机制

发布时间 2023-10-04 16:54:52作者: 沈自在。

Mysql 主从复制

1 基础准备

由于家境贫寒没有那么多的云资源供我操作,只能使用docker进行模拟了。拉取镜像简单得很就先不谈了。直接开整。

以下操作基于 mysql:5.7进行一主二从配置。

2 主库配置

  1. 运行容器
docker run -p 3306:3306 --name mysql-slaver-2 -e MYSQL_ROOT_PASSWORD=luanye-harlon@mysql -d mysql:8.0.20
  1. 进入容器
docker exec -it  容器id /bin/bash
  1. 进入配置目录
cd /etc/mysql

由于容器都是精简版本,所以没有 vim 为了方便操作配置文件,所以这里安装一下 vim

image-20220527143257205

安装vim的命令:

apt-get update

apt-get install vim
  1. 编辑my.cnf
[mysqld]
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1 
server-id=1 

#是否只读,1 代表只读, 0 代表读写 
read-only=0 

#忽略的数据, 指不需要同步的数据库 
#binlog-ignore-db=mysql 

#指定同步的数据库 
#binlog-do-db=db01

## 开启二进制日志功能,可以随便取(关键)
log-bin=master-bin
binlog-format=ROW 
  1. 重新服务
service mysql restart

# 由于 mysql 重启,会导致 docker 容器停止运行,所以需要重启docker
exit
docker restart mysql-master
  1. 创建远程登录用户
docker exec -it 容器id /bin/bash

CREATE USER 'harlon'@'%' IDENTIFIED WITH mysql_native_password BY 'luanye-harlon@mysql';

#为 shenzizia 赋予权限
GRANT REPLICATION SLAVE ON *.* TO 'harlon'@'%';

3 从库配置

创建容器过程类似,这里就省略了。。。

  1. 编辑my.cnf
[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=mysql-relay-bin  
read_only=1  ## 设置为只读,该项如果不设置,表示slave可读可写
  1. 查看master二进制日志信息
show master status
  1. 查询 master 的ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP
  1. 远程登录
change master to master_host='172.17.0.2', master_user='harlon', master_password='luanye-harlon@mysql', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=156, master_connect_retry=30;


  1. 查看主从同步状态
show slave status \G
  1. 重新设置主从设置
reset master;

3.1 二从

同上

docker run -p 6379:6379 --name redis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes