MySQL 主从复制搭建 一主一从环境搭建

使用docker 搭建环境

1. mysql 单体环境搭建


docker pull mysql:5.7
mkdir -p /home/data/mysql57
docker run -d -p 3306:3306 --restart=always --name mysql57 -eTZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=root -v /home/data/mysql57:/var/lib/mysql --privileged=true  mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci  

mkdir -p /home/data/mysql577
docker run -d -p 3307:3306 --restart=always --name mysql57 -eTZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=root -v /home/data/mysql577:/var/lib/mysql --privileged=true  mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci  

因为MySQL 没有给镜像配置数据卷映射 , 所以加上也不会同步出来 , 想在外面修改配置需要复制出来后再映射 不然就会变成空文件夹

2. 环境分配

3306 为master 3307 为slave

分别进去容器

docker exec -it mysql57 /bin/bash
apt-get update
apt-get install -y vim
vim /etc/mysql/my.cnf

mysql57 中添加

[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

添加完成后需要 重启服务 service mysql restart 在重启下容器 docker restart mysql57
然后给slave 分配一个账号 和权限[REPLICATION SLAVE REPLICATION CLIENT]

在3307 上修改

[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin  

添加完成后需要 重启服务 service mysql restart 在重启下容器 docker restart mysql577

3. 配置 启动

  1. 连接 master 3306

show master status;

File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。

  1. 添加slave 账号
    因为slave 要连接master 所以要在master 创建一个slave账号

主库添加 slave 账号 赋权 [REPLICATION SLAVE REPLICATION CLIENT]

  1. 连接slave 3307
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306
, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;

命令说明:

master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

  1. 查看slave 3307 状态

show slave status;
在这里插入图片描述

正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。

  1. 在从库中使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status ;

  2. 然后可以在主数据库中创建一个库test_slave测试

  3. 然后在从库查看是否同步,未生成则使用show slave status 查看报错,查询对应的情况
    在这里插入图片描述

  4. 常见的错误有连接不上,或者表库不存在之类的,需要重新操作


-- 停止 
stop slave;
-- 查看主库状态
change master to master_log_file='mysql-bin.000002',master_log_pos=2565;
-- 启动同步
start SLAVE;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木秀林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值