基于docker部署mysql主从复制

1. 拉取镜像

docker pull mysql:5.7

2. 创建主从配置文件

2.1 主机配置

/root/work_space/mysql_study/node1/下创建my.cnf文件

[mysqld]
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 需要复制的主数据库名字
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT
2.2 从机配置

/root/work_space/mysql_study/node2/下创建my.cnf文件

[mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

3. 启动容器

主机

docker run -d -p 3310:3306 -v /root/work_space/mysql_study/node1/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456  --name mysql01 mysql:5.7

从机

docker run -d -p 3311:3306 -v /root/work_space/mysql_study/node2/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456  --name mysql02 mysql:5.7
  • -d: 后台运行容器,并返回容器ID

  • -p 3310:3306 :将容器的3306端口映射到宿主机3310端口

  • -e MYSQL_ROOT_PASSWORD=123456 :配置环境变量,数据库连接密码

  • -v /root/work_space/mysql_study/node1/my.cnf:/etc/mysql/my.cnf :将配置文件挂载到容器中

  • –name mysql01(02):将容器命名为 mysql01(02)

4. 配置主从连接

4.1 主机

连接到主机容器终端

docker exec -it mysql01 /bin/bash #进入容器
mysql -uroot -p123456 #连接mysql

给从机授权,为了让从机能够和主机连接起来。

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

查看主机状态

show master status;

在这里插入图片描述

这里的File和Position记录下来,这俩信息代表了从机要从哪个binlog的哪里开始同步复制

4.2 从机

连接到从机容器终端

docker exec -it mysql02 /bin/bash
mysql -uroot -p123456

设置主机信息

CHANGE MASTER TO MASTER_HOST='172.17.0.2',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_PORT=3306, 
MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=438;
  • CHANGE MASTER TO MASTER_HOST=‘主机的IP地址’

    主机IP可以通过docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container id>知晓

  • MASTER_USER=‘slave’ (刚刚配置的用户名)

  • MASTER_PASSWORD=‘123456’ (刚刚授权的密码)

  • master_port=主机开放的端口

  • MASTER_LOG_FILE=‘mysql-bin.具体数字’ (binlog文件名,之前的File值)

  • MASTER_LOG_POS=之前的Position

重启从服务器复制功能

stop slave;
reset master;
start slave;

查看从机状态

show slave status\G

在这里插入图片描述

这两个参数都是Yes,则说明主从配置成功

5. 测试

主机创建数据库/表并插入数据

create database testdb;
use testdb;
create table t_vip(
    id int,
    name varchar(255) not null
);
insert into t_vip values(3,'demaxiya');

从机验证

show databases;

在这里插入图片描述

use testdb;
show tables;

在这里插入图片描述

select * from t_vip;

在这里插入图片描述

可见主从复制成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值