【MySQL】读写分离主从复制

news2024/10/7 16:25:44

1. 原理篇

1.1 读写分离问题场景:

高并发场景,读数据操作远高于写数据操作 ——

在这里插入图片描述

为了实现读写分离,我们使用数据库的主从复制:

在这里插入图片描述

1.2 主从复制:

  1. 实现主从复制的流程如下:
    在这里插入图片描述
  2. MySQL 的主从复制实现机制如下:

在这里插入图片描述

(1) master 将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

(2) slave 将 master 的 binary log events 拷贝到它的中继日志(relay log);

(3) slave重做中继日志中的事件,将改变反映到它自己的数据。

在这里插入图片描述

2. 实战篇

2.1 搭建 MySQL 主从集群

2.1.1 环境说明

准备两个 CentOS7 ,在每个上都安装一下 MySQL 。
安装方法见:CentOS7 安装 MySQL 数据库~~~

安装完一个后,直接再克隆一个 CentOS 7 就 Ok 了,复制虚拟机见 WMWare 克隆CentOS虚拟机~~~

但是这里要注意一件事,使用克隆方式生成的虚拟中的 MySQL 和原 CentOS 中的 MySQL 具有相同的 uuid (MAC 地址),需要给克隆体更换一下 uuid,更换方法如下:

(注: 以下操作在 MySQL 客户端执行)

  1. 生成新的uuid,并记录下来
select uuid();

在这里插入图片描述

  1. 查看配置文件目录

MySQL 的 uuid 是存在 auto.cnf 配置文件中的,我们要找到这个配置文件的位置,执行如下语句:

show variables like 'datadir';

在这里插入图片描述

  1. 将 auto.cnf 中的 uuid 修改为上述第一步记录的 uuid (这步回到 CentOS 下执行,退出 mysql 客户端方式为 ,输入 exit;
vi /var/lib/mysql/auto.cnf

内容修改为:

server-uuid=xxxxxx
  1. 重启 mysql 服务
service mysqld restart

2.1.2 主库配置

  1. 查看数据库状态
systemctl status mysqld
  1. 停服务器
systemctl stop mysqld
  1. 修改配置文件
vi /etc/my.cnf

修改方式:在后面加入

server-id=1
log-bin=mysql-bin #解释:server-id服务的唯一标识(主从之间都必须不同);log-bin启动二进制日志名称为mysql-bin

在这里插入图片描述

  1. 重启 mysql 服务
systemctl start mysqld
  1. 登录 mysql
mysql -uroot -p5201314love
  1. 在主库中新添加一个从库的账号

添加一个名称为repl,账号密码为5201314love,允许登录的从库ip为192.168.244.130的账号(%为任意ip)

mysql> CREATE USER 'repl 此处为用户名称'@'192.168.244.130此处为从服务器的ip地址' IDENTIFIED BY '5201314love 此处为登录密码';

执行完上述语句后,可以通过下列语句查看下授权是否创建成功

 SELECT * FROM mysql.user  where user = 'repl'\G;

在这里插入图片描述

可爱的题外话:如果提示密码太简单不复合策略加在前面加这句

mysql> set global validate_password_policy=0;
  1. 给从库账号添加授权
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.244.130'; # 说明给用户repl一个从库复制的权限在这个ip上
  1. 查看主库的状态
mysql> SHOW MASTER STATUS

在这里插入图片描述

需记录: File是二进制日志文件名,Position 是日志开始的位置。后面设置从库的时候会用到,需要记录下来。

2.1.3 从库配置

  1. 查看数据库状态
systemctl status mysqld
  1. 停服务器
systemctl stop mysqld
  1. 修改配置文件
vi /etc/my.cnf

修改的内容为在后面加入:

server-id=2
  1. 重启
systemctl start mysqld
  1. 登录
mysql -uroot -p5201314love
  1. 使用主库授权的账号
mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.244.130',
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='5201314love',
    -> MASTER_LOG_FILE='mysql-bin.000006',
    -> MASTER_LOG_POS=324;

说明:
1)192.168.244.130:主库主机ip,根据实际情况改写
2)repl:主库授权的账号
3)5201314love:主库授权账号密码
4)mysql-bin.000006:主库日志文件名,上面记录过的
5)324:主库日志文件位置,根据上面主库查询到的主库日志文件位置填写,上面记录过的

  1. 重启
systemctl stop mysqld
systemctl start mysqld

2.1.4 测试配置结果

在主库添加数据库、表、数据,检测从库是不是有同样操作,使用 Navicat 连接测试:

在这里插入图片描述

主从常用主从命令如下:

  1. 查看主库状态
mysql>show master status;
  1. 查看从库状态
mysql>show slave status;

2.1.5 关于从库停机无法同步

问题描述:从库停机修改配置,从起数据库之后,出现无法同步主库内容

解决方案:

1)停止主从

mysql> stop slave;

2)设置

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
mysql> START SLAVE; 

3)重新启动主从,从库断开期间那部分丢失的数据会自动同步过来的

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shell基本命令

shell基本命令 echo: -n:取消输出后行末的换行符号 -e:支持反斜线控制的字符转换 echo -e "\a":输出警告声 echo -e "\e[1;31m abcd \e[0m":输出带颜色的信息bash执行方法: 给bash文件添加执行…

《龙湖地产》企业门户网站前端设计(Html,CSS,JavaScript,jQuery)

目 录 引言 1 一、企业网站建设方案 2 (一)搭建网站的必要性和可行性 2 (二)网站建设的目的 2 (三)网站设计原则 2 二、企业网站开发工具的选择和介绍 4 (一) HTML概述 4 &#xff0…

上市公司共同机构所有权数据-附顶刊《管理世界》数据应用示例

1、数据来源:见数据说明文件 2、时间跨度:2003-2020 3、区域范围:所有上海、深圳证券交易所A股主板、中小企业板、科创板、创业板上市公司 4、指标说明: 具体计算方式详见分享文件夹文本文档 描述性统计如下: 部分…

Docker容器学习笔记(看了狂神视频)

狂神的笔记更加系统详细,推荐大家可以去看狂神的视频教程和笔记。我这里仅根据我自己的需求写的笔记,对于需要快速掌握docker的使用的朋友可以参考学习。 Docker 背景需求 之前,开发一套环境,上线一套环境,环境配置十…

STM32滴答定时器SysTick精准延时,兼容HAL库和标准库

STM32手册资料下载:STM32资料Github链接;STM32资料Gitee链接; 注意:Github是国外的,要翻墙,Gitee是国内的,无需翻墙。 目录 滴答定时器的功能 模块化思想 什么叫做模块化 如何利用keil实现…

用 Wireshark 让你看见 TCP 到底是什么样!

本文为掘金社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究! 莫听穿林打叶声,何妨吟啸且徐行。 前言 当你看到这篇文章时,你只能看到已经渲染好的文字和图像,而网络数据的交…

rk3588硬件构成-rock5b

前言 rk3588是瑞芯微的一套新的arm64的板子,上一代用的比较多的是rk3399,新的硬件设备比之前更强大,接口更多,本系列就是介绍相关的硬件软件的一些资料,后面会根据不同的使用进行分篇的介绍 很多资料官网有提供&…

深度学习与总结JVM专辑(四):类文件结构(图文+代码)

类文件结构概述无关性的基石Class类文件结构前言字节码文件结构属性魔数与Class文件的版本号魔数版本号常量池反编译软件访问标志类索引,父类索引与接口索引集合字段表集合方法表集合属性表集合Code属性attribute_name_indexmax_stackmax_localscode_length和codeja…

视频卡顿率测试方法

一、背景介绍 视频流畅性测试是视频质量评估一个重要的指标。一般的获取方法是在渲染前增加统计信息。不过这种方法需要增加额外工作量,并且也不是用户直接的体验数据。 这里介绍一种基于时域运动指标/平均相关位置像素差(TI:temporal info…

Android Camera性能分析 第24讲 录像Buffer Path帧率统计

​ 本讲是Android Camera性能分析专题的第24讲,我们介绍录像Buffer Path帧率统计,包括如下内容: 从GraphicBufferSource统计录像Buffer Path帧率Video Codec角度统计视频帧率Video Codec2角度统计视频帧率 视频在线观看: 极客笔…

Nacos Discovery--服务治理

目录 一,服务治理介绍 二,nacos简介 nacos实战入门 搭建nacos环境 第1步: 安装nacos 第2步: 启动nacos 第3步: 访问nacos 将商品微服务注册到nacos 1 在shop-common模块的pom.xml中添加nacos的依赖 注意在父模块中是否导入了alibaba 2 在主类上添加E…

Altium Designer智能粘贴命令的使用教程

怎么样等间距的复制很多过孔?怎么带网络的复制走线?又或者是怎么样把元件的位号及网络从当前的这个PCB调用到另一个PCB板中呢?PCB设计当中经常会遇到这些问题,可以使用特殊粘贴也可以称为智能粘贴法来实现。 1、选中需要复制的元素…

微信小程序 视频列表滑动无限循环(仿抖音)

一、写在前面: 1:安卓ios表现基本一致,不是swiper组件实现,滑动效果流畅不卡顿,实现了列表无限循环。不是使用官方的腾讯视频播放组件,完整代码在下面 2:实现功能:支持位置导航、拨打电话、复制微信号、分…

如何实现fastdds的topic调试工具

在使用fastdds进行实际的开发调试中发现,常常需要对已经发布的话题进行进一步的调试,比如话题存在,话题内容,话题频率等等信息都需要确认,尤其是话题内容。这时候就需要一个能进行这项操作的调试工具。可能对于用过ros…

hit_os_lab2 操作系统启动

前置知识 1.1 基础概念 入理论课程的学习。 如果网易云上的课程无法查看,也可以看 Bilibili 上的 操作系统哈尔滨工业大学李治军老师。 L2 开始揭开钢琴的盖子L3 操作系统启动 同济大学赵炯博士的《Linux 内核 0.11 完全注释(修正版 V3.0&#xff09…

防火墙练习实验

♥️作者:小刘在C站 ♥️每天分享云计算网络运维课堂笔记,一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放。 目录 二. 实验命令 一.实验图纸 二. 实验命令 ciscoasa> en Password: ciscoasa# co…

DJ12-2-4 串操作指令

目录 1. REP 重复前缀 2. 串操作指令的基本概念 3. 串操作指令的指令类型 (1)串传送指令 MOVS (2)串传送指令 CMPS (3)串扫描指令 SCAS (4)串装入指令 LODS (5&a…

如果把网络原理倒过来看,从无到有,一切如此清晰(下)

人生若只如初见。 前言 当我在台灯下,听着远隔17年前五月天的歌,而在数日后,我的文字也会纵使相隔万里远的来到你的屏幕前,就觉得这一切妙不可言。 OSI 网络七层模型 《如果把网络原理倒过来看,从无到有&#xff0c…

Metabase学习教程:仪表盘-5

如何进行时间段比较 我们通过不同的方法来比较一个指标在不同日期范围内的表现。 我们将研究不同的策略来比较两个不同时期的指标,比如将本周与上周、去年同期与上一周进行比较。我们将使用Metabase附带的示例数据库,这样您就可以继续学习了。这个示例…

【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、Vulkan简介 Vulkan是一个跨平台的图形绘制接口,被称为下一代OpenGL,因为尽管OpenGL提供了丰富的图形API,但他在底层实现的C代码早已封装起来,由于开发者修改不了底层代码&#xf…