MySQL主从集群

MySQL主从集群

主从模式、集群模式,都是在一个项目中使用多个mysql节点进行存储和读取数据。

当单机模式部署,不满足安全性、高可用、高并发等需求的时候,就需要考虑主从模式或者集群模式部署。

什么是主从模式?

  • 主从模式,或者是叫主从架构、主从复制,有以下几种常见方案:一主一从、一主多从、多主一从、互为主 备、级联复制等。
  • 主数据库必须开启binary log(二进制)功能,因为主从同步所有的操作都是基于二进制文件来完成的。
  • 数据同步模式有:
    •  异步模式:主库将事务binlog事件写入到binlog文件中,此时主库只会 通知一下dump线程发送这些新的binlog,然后主库就会继续处理提交 操作,而此时不会保证这些binlog传到任何一个从库节点上。
    •  半同步模式:主库只需要等待至少一个从库节点收到并且Flush binlog 到relay-log文件即可,主库不需要等待所有从库给主库反馈。同时,这里只是一个收到的反馈,而不是已经完全执行并且提交的反馈。
    •  全同步模式:当主库提交事务之后,所有的从库节点必须全部收到,APPLY并且提交这些事务,然后主库线程才能继续做后续操作。

1、主从复制指的是当主数据库中进行了update、insert、delete操作导致数据发生改变时,变化会实时同步到一个或者多个从数据库(slave)中。

2、默认情况下异步复制、无需维持长连接。

3、通过配置可以选择想要同步的库和表
 

什么是集群模式

集群最大的优点就是数据实时同步,高可用,每个节点的数据都是同步一致的,不像主从,有时会出现数据不一致,而高可用,任何一个节点宕机都不会影响业务。

集群模式有以下集中常见部署方式:

  • 读写分离的集群模式:集群中有的节点只进行写入操作,有的节点只进行读取操作,每个节点的数据都是完全一致的。
  • 分片(分库分表)集群模式:集群中所有的节点表结构一致,每个节点存储的数据不一样。分片算法主要有两种,一种是范围法(1-100条数据在节点A,101-200条数据在节点B),另一种是HASH法(对每条数据按照一定的算法分配到不同的存储节点)。
  • 读写分离和分片模式组合应用,先进行分片模式部署,然后对每个分片进行读写分离模式部署。

主从模式部署注意事项

  • 常用命令(执行命令之前stop服务,执行完再start):
  • 查看主节点状态:show master status\G;
  • 查看从节点状态:show slave status\G;
  • 停止同步:stop slave;
  • 开启同步:start slave;
  • 修改Master_Log_File:CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0;
  • 修改master节点信息:CHANGE MASTER TO MASTER_HOST='192.168.203.141', MASTER_PORT=33060,MASTER_USER='root', MASTER_PASSWORD='123456';
  • 删除当前节点的 binlog 文件:PURGE BINARY LOGS TO 'binlog.000001';
  • 数据的操作日志位置:SHOW BINARY LOGS;
  • 数据的真实具体位置:SHOW GLOBAL VARIABLES LIKE "%datadir%";
  • 每个节点的slave_sql_running、Slave_IO_Running两个字段都是YES,集群状态才正常
  • 主服务器查看主节点状态,显示的 File 字段,和从服务器查看从节点状态,显示的 Master_Log_File 字段,必须保持一致。
  • slave_sql_running为No的话,可能是主从库数据不同步,可以同步一下数据。
  • 数据导出命令(在mysql服务器执行,不需要登录数据库):
  • mysqldump -u[用户名] -h[ip] -p[密码] -P[端口号] --databases 数据库名 --tables 表名 >导出的文件名.sql
  • 数据库导入命令(导入的时候需要指定数据库,保证指定的数据库存在):
  • mysqldump -u[用户名] -h[ip] -p[密码] -P[端口号] < 导入的文件名.sql

操作

docker pull mysql/mysql-server:5.7

mkdir -p /home/data/mysql/slave/{conf,data}

mkdir -p /home/data/mysql/slave/{conf,data}

上传数据库容器的配置文件my.cnf

  • 主数据库需要开启二进制日志 log-bin=mysql-bin
  • 主从服务器都需要指定服务器标识ID server-id=1

创建Master主服务器

设置主服务器 master

docker run -p 3999:3306 \
--name mysql-master \
-v /home/data/mysql/master/conf/my.cnf:/etc/my.cnf \
-v /home/data/mysql/master/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql/mysql-server:5.7

设置从服务器 slave

docker run -p 3998:3306 \
--name mysql-slave \
-v /home/data/mysql/slave/conf/my.cnf:/etc/my.cnf \
-v /home/data/mysql/slave/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql/mysql-server:5.7

接着查看结果

输入 dockers ps

配置主从

先进入主服务器,查看主服务器的binlog 日志文件

show master status;

主服务器界面

从服务器界面

CHANGE MASTER TO MASTER_HOST='192.168.198.128', MASTER_PORT=3999, MASTER_USER='root',MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=586;

master_host=xx       这里填master主机IP,除了填写住宿主机IP,还可以填写bridge网络中的IP
master_log_file=xx   这里填写 File 的值就是前面我们show master status;命令的执行结果
master_log_pos=xx 这里填写 Position 的值就是前面我们show master status;命令的执行结果

start slave;

show slave status\G;

这里只要看到两个参数Slave_IO_Running和Slave_SQL_Running都为true|yes,则表示复制是正常进行的, 到这里我们的主从结构也就搭建完成了

集群成功后,在mysql-master容器重启后虽然File的值和Position的值会变化,但在mysql-slave可以进行跟踪,所以不需要重新进行配置

stop slave;

 reset slave all;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/418518.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop基础知识

Hadoop基础知识 1、Hadoop简介 广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念——Hadoop生态圈。狭义上说&#xff0c;Hadoop指Apache这款开源框架&#xff0c;它的核心组件有&#xff1a; HDFS&#xff08;分布式文件系统&#xff09;&#xff1a;解决海量数据存储Y…

EasyRecovery2024数据恢复大师最新版本下载

EasyRecovery可以从初始化的磁盘恢复损坏或删除的文件。该软有易于使用&#xff0c;即使是最缺乏经验的用户也可以轻松恢复数据。一款威力非常强大的硬盘数据恢复工具。能够帮你恢复丢失的数据以及重建文件系统。EasyRecovery 不会向你的原始驱动器写入任何东东&#xff0c;它主…

Canny边缘检测 双阈值检测理解

问题引入 我们用一个实际例子来引入问题 import cv2 import numpy as npimgcv2.imread("test.png",cv2.IMREAD_GRAYSCALE) # 修改图像大小 show cv2.resize(img,(500,500))v1cv2.Canny(show,120,250) v2cv2.Canny(show,50,100)# 连接图像 res np.hstack((v1,v2)…

b+树的理解

二叉树&#xff1a; 每个节点支持两个分支的树结构&#xff0c;相比于单向链表&#xff0c;多了一个分支。 二叉查找树&#xff1a; 在二叉树的基础上增加了一个规则&#xff0c;左子树的所有节点都小于它的根节点&#xff0c;右子树的所有节点都大于他的根节点。 二叉查找树…

基于JavaWeb+SSM+Vue基于微信小程序的在线投稿系统的设计和实现

基于JavaWebSSMVue基于微信小程序的在线投稿系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1微信小程序 2 2.2 MYSQL数据库 3 2.3 u…

SpringSecurity+JWT前后端分离架构登录认证

目录 1. 数据库设计 2. 代码设计 登录认证过滤器 认证成功处理器AuthenticationSuccessHandler 认证失败处理器AuthenticationFailureHandler AuthenticationEntryPoint配置 AccessDeniedHandler配置 UserDetailsService配置 Token校验过滤器 登录认证过滤器接口配置…

linux网络协议栈2--网络包接收发送流程

上文我们讲了报文格式&#xff0c;应该对数据传输格式有了一定了解&#xff0c;这篇文章主要讲述的是网络包接收和发送的流程&#xff0c;主要是大方面来介绍。 网络包接收流程 当网络数据帧通过网络传输到达网卡时&#xff0c;网卡会将网络数据帧通过DMA的方式放到环形缓冲区…

本人最开始使用类GPT做的记录

最开始 最开始时用bing&#xff0c;改了header后可以使用&#xff0c;属于是身边人第一批使用的了&#xff0c;但是后来会报重定向错误&#xff0c;好像是因为微软做了反制措施&#xff0c;需要魔法才可以了然后我又找啊找啊&#xff0c;发现了chathub这个插件&#xff0c;用了…

超过GPT3.5?Mixtral 8*7B 模型结构分析

Datawhale干货 作者&#xff1a;宋志学&#xff0c;Datawhale成员 前言 2023年12月11日&#xff0c;Mistral AI团队发布了一款高质量的稀疏专家混合模型Mixtral 8x7B。 Mistral AI继续致力于向开发者社区提供最优秀的开放模型。在人工智能领域向前发展&#xff0c;需要采取超越…

AIGC - 视频生成模型的相关算法进展

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135688206 视频生成技术确实是一个很有潜力的颠覆性技术领域&#xff0c;可以作为企业创新梯队的重点关注方向&#xff0c;最近发展很快&#xff…

SaaS多租户篇

文章目录 1. 多租户是什么2. 技术组件2.1 如何实现多租户的DB封装2.2 如何实现多租户的redis封装2.3 如何实现多租户的Web和Security封装 1. 多租户是什么 2. 技术组件 2.1 如何实现多租户的DB封装 2.2 如何实现多租户的redis封装 2.3 如何实现多租户的Web和Security封装

DBA技术栈MongoDB: 索引和查询优化

2.1 批量插入数据 单条数据插入db.collection.insertOne()多条数据插入db.collection.insertMany() db.inventory.insertMany( [{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },{ item: "notebook"…