一、为什么要搭建主从架构呢

1.数据安全,可以进行数据的备份。

2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据库访问的压力

3.故障转移(高可用),当主节点宕机之后,将从服务切换为主节点继续提供服务。当然要实现主从切换还需要其他中间件来实现。

二、主从数据同步原理

mysql的主从架构一般都是通过binlog日志实现,binlog日志会记录主库的每一次操作。从库和主库建立连接TCP后,请求主库将binlog传输过来,这是主库有一个dump线程把binlog传输给从库。

从库将读取到的binlog日志写入自己的relaylog,另外一个线程读取relaylog里面的内容进行重放。有那么一点点像redis的AOF持久方式,也是重放操作记录。

三、docker搭建mysql主从

感觉用docker会方便很多,自己写点demo之类需要构建集群的时候确实方便很多。

1.拉镜像,再启动两个mysql容器

我的docker是装的windows版本的。

-d 后台启动  最后的mysql:5.7 是我自己的镜像版本,分别映射到宿主机的3306和3307端口 方便等下使用工具连接

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

docker run -p 3307:3306 --name mysqlslave -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

确保两个mysql容器都正常启动了,可以使用工具连接3306和3307端口看看是否能够连接上mysql。

2.修改配置,这个时候我们需要进入到docker容器内部去修改/etc/mysql目录下的mysql的my.cnf文件

docker exec -it 容器ID/容器名字 /bin/bash

docker容器是轻量级的嘛,所以有些操作是不支持的,我们想要修改文件一般都会使用vim命令嘛,所以我们还需要安装一下:

先执行

apt-get update

在执行

apt-get install vim

master的my.cnf文件:

[mysqld]
#保证唯一性
server-id=1
#开启binlog日志并设置文件名字
log_bin=master-bin

slave的my.cnf文件:

[mysqld]
#保证唯一性
server-id=2
#开启relay日志并设置文件名字
relay_log=slave-relay

  

配置完之后重启两个容器的mysql服务 service mysql restart  或者重启容器,因为重启mysql服务容器也会停止。

windows桌面版的docker可以直接在这儿重启容器

3.查看master状态配置并进行连接

show master status;

可以看到binlog文件,还有文件中的索引位置。Binlog_Do_DB和Binlog_Ignore_DB这两个字段是表示需要记录binlog文件的库或者不需要记录binlog文件的库。暂时没有配置,就表示是针对全库记录日志。

在从节点上面执行sql语句:

change master to master_host='172.17.0.3',
master_user='root',
master_password='root',
master_port=3306,
master_log_file='master-bin.000001',
master_log_pos= 154;

  

master_host :Master的地址,这儿需要的是容器在的独立IP 可以进入容器查看,也可执行docker指令查看:

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/容器id

master_user master_password:用于同步的用户的密码,实际中肯定不能使用root用户

master_log_file:指定 Slave 从哪个日志文件开始复制数据

master_log_pos:从哪个 Position 开始读,都是对应master中的值

执行成功之后在启动slave就可以了

start slave;
show slave status

查看从节点信息了:

现在去主库建库表,写数据,从库都会吧数据同步过去了

四、其他

这个主从架构师可能失败的,如果查看slave状态发现Slave_SQL_Running=no 就表示主从同步失败了,可能是在从库进行了些,导致从主库同步过来主键冲突。也可能是从库服务重启之后有事务回滚了。如果是从库事务回滚可以:

stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave ;

还可以重新设置主节点的binlog信息 重新指定position,可能需要处理一下从节点上面的数据

其他参数:

#master:
#需要同步的二进制数据库名
binlog-do-db=masterdemo
#只保留7天的二进制日志,以防磁盘被日志占满(可选)
expire-logs-days = 7
#不备份的数据库
binlog-ignore-db=xxx1
binlog-ignore-db=xxx2 #从库:
#如果master库名[mastdemo]与salve库名[mastdemo01]不同,使用以下配置[需要做映射]
replicate-rewrite-db = xxx -> aaa
#如果不是要全部同步[默认全部同步],则指定需要同步的表
replicate-wild-do-table=xxx1
replicate-wild-do-table=xxx2

Docker构建mysql主从的更多相关文章

  1. 用 Docker 构建 MySQL 主从环境

    开源Linux 一个执着于技术的公众号 前言 本篇文章记录使用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境.如果你严格按照文中的步骤进 ...

  2. 使用docker 实现MySQL主从同步/读写分离

    1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...

  3. docker安装mysql主从

    docker安装mysql主从 启动主库: 1.docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5 ...

  4. Docker容器启动Mysql,Docker实现Mysql主从,读写分离

    Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...

  5. springboot多数据源配合docker部署mysql主从实现读写分离

    本篇主要有两部分: 1.使用docker部署mysql主从 实现主从复制 2.springboot项目多数据源配置,实现读写分离 一.使用docker部署mysql主从 实现主从复制 此次使用的是wi ...

  6. 用Docker构建MySQL镜像

    构建MySQL镜像 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过D ...

  7. docker配置mysql主从与django实现读写分离

    一.搭建主从mysql环境 1 下载mysql镜像 docker pull mysql:5.7 2 运行刚下载的mysql镜像文件 # 运行该命令之前可以使用`docker images`是否下载成功 ...

  8. CentOS 7.2 基于Docker实现MySQL主从架构

    原文地址:https://blog.csdn.net/sunnyfg/article/details/80655823 1.安装Docker(略) Centos7下安装Docker : https:/ ...

  9. docker运行mysql主从备份,读写分离

    1)从Docker官方下拉MySQL的image 打开https://hub.docker.com/ 搜索mysql 在docker中运行 默认tag为latest docker pull mysql ...

随机推荐

  1. Rsync忽略文件夹或目录

    使用Rsync同步的时候往往会要求对某个文件夹或者文件进行忽略,客户端可以使用--exclude参数来实现对,目录或者文件的忽略 rsync -rltvz --port=873 --exclude & ...

  2. bond4以及vlan子接口配置

    场景: 前提,交换机的配置由网络工程师配合! 1.跨交换机做bond,模式为LACP,linux双网卡做bond4,模式为4: 2.系统为centos7.0-123: 3.服务器仅有两张万兆网卡,为e ...

  3. linux基础之进阶命令二

    本节内容 基础命令二: 1.      alias:查看和设置别名(alias:别名) alias 'ren=ls -ld' \ren 可不取消别名,执行ren原本的命令 2.      unalia ...

  4. Linux进阶之使用Oh-My-Zsh打造炫酷终端

    Oh My Zsh是基于zsh命令行的一个扩展工具集,提供了丰富的扩展功能.除了功能增强之外,还提供非常丰富的主题.使用Oh-My-Zsh打造酷炫Shell终端的步骤(Deepin系统): 原始终端: ...

  5. lua中求table长度--(转自有心故我在)

    关于lua table介绍,看以前的文章http://www.cnblogs.com/youxin/p/3672467.html. 官方文档是这么描述#的: 取长度操作符写作一元操作 #. 字符串的长 ...

  6. 3*060-A 日志记录

    电路检修遇到的问题: 今天在检修一块3060-A电路板时 发现   3.3V烫 但是3.3V路上的电容并没有短路 于是拆单片机   拆RS232EN  拆  FM24V 最后发现  原来是  1117 ...

  7. python 判断对象是否相等以及eq函数

    当对两个点的实例进行值的比较时,比如p1=Point(1,1) p2=Point(1,2),判断p1==p2时__eq__()会被调用,用以判断两个实例是否相等.在上述代码中定义了只要x和y的坐标相同 ...

  8. jenkins部署vue项目

    一.新建自由风格的项目 二.配置项目 三.部分部署脚本 #!/bin/bashecho $PATHnpm config set proxy nullnpm config set https-proxy ...

  9. Docker五分钟搭建Wordpress

    当你看到这篇文章的时候,表明你已经有docker的基础知识了,或者可以看上一篇文章 Docker 入门教程. 传统的使用wordpress搭建网站,意味着你需要搭建以下四个环境: php: apach ...

  10. H.265视频编码与技术全析(下)

    H.265视频编码与技术全析(下) 四.帧内预测模式 共35个(h264有9个),包括Planar,DC,33个方向模式: 除了Intra_Angular预测外,HEVC还和H.264/MPEG-4 ...