mysql 保存图片二进制_基于Docker实现MySQL主从复制

5f6298bae5b5b280c8b491223592a687.png

前言

MySQL的主从复制是实现应用的高性能,高可用的基础。对于数据库读操作较密集的应用,通过使数据库请求负载均衡分配到不同MySQL服务器,可有效减轻数据库压力。当遇到MySQL单点故障中,也能在短时间内实现故障切换。本文就MySQL的内建的复制功能进行阐述。

版本

  • MySQl: 5.7.17
  • CentOS: 7.4.1708
  • Docker: 1.13.1

概述

MySQL复制数据流程:

  1. 主库在数据更新提交事务之前,将事件异步记录到binlog二进制日志文件中,日志记录完成后存储引擎提交本次事务
  2. 从库启动一个I/O线程与主库建立连接,用来请求主库中要更新的binlog。这时主库创建的binlog dump线程,这是二进制转储线程,如果有新更新的事件,就通知I/O线程;当该线程转储二进制日志完成,没有新的日志时,该线程进入sleep状态。
  3. 从库的I/O线程接收到新的事件日志后,保存到自己的relay log(中继日志)中
  4. 从库的SQL线程读取中继日志中的事件,并执行更新保存。
41a60de137fc38fc8be559b394af6ffc.png

配置主从库

主库my.cnf配置

在主库的my.cnf中打开二进制日志,并设置服务Id。

log-bin = mysql-binserver-id = 1

注意server-id必须是一个唯一的数字,必须主从不一致, 且主从库必须设置项。

从库my.cnf配置

log-bin = mysql-binserver-id = 2log-slave-updates = 1read-only = 1

从库也开启log-bin,log-slave-updates设置为从库重放中继日志时,记录到自己的二进制日志中,可以让从库作为其他服务器的主库,将二进制日志转发给其他从库,在做一主多从方案时可考虑该种方案。

Dockerfile构建MySQL镜像

构建所需文件

这里master和slave文件各自保存不共用,先创建文件夹 /usr/local/mysql 然后在目录创建master和slave两个目录,再各自创建data文件夹

31de6a8aa9dc279a07e2541835c26053.png
  • data 目录用来保存数据文件的目录
  • Dockerfile 保存Dockerfile内容
  • init.sql 初始化数据库的SQL
  • my.cnf 数据库配置文件,配置方式上面已提到
  • start.sh Dockerfile构建MySQL时的脚本

Dockerfile 内容

# 利用 mysql 镜像创建新的镜像FROM mysql:5.7.17ENV MYSQL_ROOT_PASSWORD ytaoCOPY start.sh /mysql/start.shCOPY my.cnf /etc/mysql/my.cnf COPY init.sql /mysql/init.sqlEXPOSE 3306CMD ["sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值