Lnmp架构之mysql数据库实战1

1、mysql数据库编译

编译成功

2、mysql数据库初始化

配置数据目录

全局文件修改内容

生成初始化密码并进行初始化设定

3、mysql主从复制

什么是mysql的主从复制?

MySQL的主从复制是一种常见的数据库复制技术,用于将一个数据库服务器(称为主服务器)上的数据同步到另一个或多个数据库服务器(称为从服务器)上。

在主从复制中,主服务器负责处理所有的写入操作(INSERT、UPDATE、DELETE等),同时将这些写入操作记录在二进制日志(binary log)中。从服务器通过连接到主服务器并从二进制日志获取数据变更记录,然后将这些操作应用到自己的数据库中。

mysql复制的原理

1. 主库(Master服务器)记录二进制日志(Binary Log):主库负责处理所有的写操作(INSERT、UPDATE、DELETE等),并将这些操作记录在二进制日志中。二进制日志包含了数据变更的详细信息,以便从库能够获取到。

2. 从库(Slave服务器)连接主库:从库通过配置主库的IP地址和认证信息来连接主库。

3. 从库生成I/O线程(I/O Thread):从库启动时,生成一个I/O线程。I/O线程负责连接到主库,并监听主库上的二进制日志事件。它会一直读取主库的二进制日志,将数据写入从库的中继日志(Relay Log)中。

4. 主库接收从库连接请求:主库收到从库的连接请求后,会验证从库的身份,并将需要复制的二进制日志发送给从库的I/O线程。

5. I/O线程将事件写入中继日志:I/O线程将从主库获取到的二进制日志事件写入从库的中继日志中。中继日志是从库上的一系列二进制日志文件,它保存了从主库同步过来的数据变更事件。

6. 从库生成SQL线程(SQL Thread):同时,从库还会生成一个SQL线程。SQL线程负责读取中继日志中的二进制日志事件,并在从库上执行这些事件。它会将事件转换为对应的SQL语句,然后逐条执行这些SQL语句,将数据变更应用到从库的数据库中。

7. SQL线程执行中继日志中的事件:SQL线程会读取中继日志中的二进制日志事件,并逐条解析执行这些事件。它将事件转换为相应的SQL语句,并在从库上执行这些SQL语句,将数据变更应用到从库的数据库中。

8. 从库周期性地重复上述步骤:从库会周期性地重复执行上述步骤,以保持与主库的同步。I/O线程会持续监听主库的二进制日志事件,将其写入中继日志;SQL线程会读取中继日志中的事件并执行。通过不断重复这个过程,从库能够保持与主库的数据一致性

配置master服务器

配置slave服务器

在server2上(已安装设定好mysql服务)

测试:

在master(主服务器)上

在server2(从服务器)上实现同步

当master上有数据时的同步方法

将server1和server2上的数据文件复制到server3上

在server3上

在server1 master 上

注意:生产环境中备份时需要锁表,保证备份前后的数据一致 mysql> FLUSH TABLES WITH READ LOCK;

备份后再解锁 mysql> UNLOCK TABLES;

注意:mysqldump命令备份的数据文件,在还原时先DROP TABLE,需要合并数据时需要删除此语句

在server3上

测试:

只有读的操作远远多于写的操作时才会用一主多从,数据库的外部需要接入高可用负载均衡;

缺陷:

master 端Binlog是直接考给slave的是异步操作

异步操作:master 端更新完了之后直接发给slave,master不需要知道slave端是否接收到,这样就会导致比如master端到slave端网络出现问题;意思就是master可以成功运作,也把日志发给slave 但是由于网络的问题,这个数据没有真正发送给slave端,那么这时候master down掉之后,slave端开始接管的时候 数据就会丢失。

在IO中有个内置的半同步模式

在IO中,有个内置的半gtid模式

切到gtid模式

master配置

slave配置(所有节点配置相同)

重新配置+重新启动

在gtid模式下,当master有问题的时候,就会挑离它id最近的slave作为master,供给下面的slave,以此类推。

通过设置gtid 大大降低复杂度。通过全局的方式,不用关心它的日志文件和binlog号,gtid 只关心它的下一跳是谁就行,就是gtid next。

master端添加数据

slave即可查询到gtid标识号

server3也可以

半同步模式(必须要走gtid)

解决IO

给master端安装半同步模块

slave端也安装半同步模块并激活重启IO线程

将半同步参数写入配置文件,确保重启后依然生效(master和salve都由设置)

测试

当停掉所有的slave端的IO线程:

此时,再在master端插入数据

想要数据保持高度一致性,要将等待时间设定成无穷大,表示master只要没收到slave端返回信息则就会一直等待,不会输出错误数据。

当所有的slave节点再次启动IO线程,mysql会自动切回半同步模式

mysql> START SLAVE IO_THREAD;

Query OK, 0 rows affected (0.00 sec)

并行复制(提高效率)

默认slave节点sql单线程回放,会造成数据同步延时较高

slave节点添加以下参数解决,不需要在master端设定,因为sql线程只存在于slave端

注意:所有的slave端都要添加并行参数

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

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

相关文章

解决Permission is not allowed后基于Ubuntu23.04安装配置docker与docker-compose

参考:Docker官网-Install Docker Engine on Ubuntu 虚拟机里安装ubuntu-23.04-beta-desktop-amd64,开启SSH(换源、备份),配置中文以及中文输入法等 基于CentOS7安装配置docker与docker-compose 一、 Install using the Apt repository 1.…

线性代数的本质(七)——特征值和特征向量

特征值和特征向量 本章特征值和特征向量的概念只在方阵的范畴内探讨。 相似矩阵 Grant:线性变换对应的矩阵依赖于所选择的基。 一般情况下,同一个线性变换在不同基下的矩阵不同。仍然以平面线性变换为例,Grant 选用标准坐标系下的基向量 i…

fastjson远程命令执行

fastjson远程代码执行 漏洞原因:fastjson在对json字符串反序列化的时候,会读取到type的内容,将json内容反序列化为java对象并调用这个类的setter方法。 1、搭建rmi服务 直接利用jndi-exploit工具 2、抓包改为POST。开启nc监听、发包 PO…

贸易战的影响:跨境电商的“黑洞”风险与机遇

当今全球贸易局势充满了不确定性和动荡。贸易战的阴云笼罩下,跨境电商企业面临着前所未有的挑战,但与此同时,也蕴藏着巨大的机遇。本文将深入探讨贸易战对跨境电商的影响,以及企业在这个新现实中如何应对风险并寻找机遇。 贸易战的…

快手商品详情数据API接口【关键词搜索商品列表数据】APP端商品详情数据

快手商品API接口是快手电商平台为开发者提供的一组接口,允许开发者通过程序代码访问快手电商平台的商品数据,实现商品信息的获取等操作。以下是快手商品API接口的一些常用功能: 获取商品列表:通过该接口可以获取店铺或分类下的商…

npm常用命令系统介绍

npm常用命令系统介绍 npm helpnpm initpackage.json 文件package.json 文件属性说明默认 package.json 文件--参数[-yes|-y]设置 package.json 中字段的默认值package-lock.json 文件 npm [config|c]设置源 npm [install|i]可选参数:全局安装的特性 包的删除npm uni…

Vue3 - 实现动态获取菜单路由和按钮权限控制指令

GitHub Demo 地址 在线预览 前言 关于动态获取路由已在这里给出方案 Vue - vue-admin-template模板项目改造:动态获取菜单路由 这里是在此基础上升级成vue3和ts,数据和网络请求是通过mock实现的 具体代码请看demo!!! 本地权限控制,具体是通过…

(总目录)springboot - 实现zip文件上传并对zip文件解压, 包含上传oss

全文目录,一步到位 1.本文概述1.1 本文简介 2. 功能实现2.1 统一文件校验2.2 普通(多)文件上传[服务器]2.2.1 controller层2.2.2 service层2.2.3 业务impl实现类2.2.4 FileIOUtils工具包代码 2.3 zip文件的解压2.4 图片文件的压缩2.5 oss文件后端上传2.6 oss文件前端上传2.7 后…

matlab读写json文件

Background 通常,在matlab中使用mat文件进行数据存储。MAT文件是MATLAB中用来存储数据的二进制文件格式。MAT文件可以包含各种数据类型,包括数字、矩阵、向量、结构体、字符和函数等。但是,当和其他语言有交互时,mat文件会不太方便…

golang实现远程控制主机

文章目录 ssh原理使用golang远程下发命令使用golang远程传输文件 ssh原理 说到ssh原理个人觉得解释最全的一张图是这张华为画的 Connection establishment 这一步就是建立tcp连接 version negotiation 这一步是ssh客户端(连接者)和被ssh服务端(连接者)进行协议的交换&#xf…

Jetpack Compose 的简单 MVI 框架

Jetpack Compose 的简单 MVI 框架 在 Jetpack Compose 应用程序中管理状态的一种简单方法 选择正确的架构是至关重要的,因为架构变更后期代价高昂。MVP已被MVVM和MVI取代,而MVI更受欢迎。MVI通过强制实施结构化的状态管理方法,只在reducer中…

控制台日志打印console的封装,加入美化、行显示与打印开关,支持node.js环境

控制台日志打印console的封装,加入美化、行显示与打印开关,支持node.js环境 为什么要写这个? 封装这个控制台日志打印工具,主要是在项目中自己做的SDK需要提供给其他开发人员使用,加入了日志美化和打印打开&#xff…

【数据结构】顺序表与ArrayList

作者主页:paper jie 的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精…

【云计算】虚拟私有云 VPC

虚拟私有云 VPC 1.前言1.1 基本介绍1.2 VPC 的作用1.3 VPC 的适用人群 2.VPC 基本概念2.1 VPC 相关基本概念2.2 其他相关基本概念 3.VPC 通信场景3.1 VPC 内部互通3.2 VPC 间互通3.2.1 对等连接3.2.2 Transit Gateway 或者云联网 3.3 访问 Internet3.3.1 Internet 网关3.3.2 NA…

【HCIE】04.网络安全技术

端口隔离 在同一VLAN中可以隔离二层与三层通信,让同VLAN内的设备可以通信或者不可以通信。 定义一个端口隔离组,在一个组内无法互访,不在一个组里面可以进行互访 port-isolate enable group1 //使能端口隔离功能 port-isolate mdoe all //全…

B : DS顺序表--连续操作

Description 建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000) 该类具有以下成员函数: 构造函数:实现顺序表的初始化。 插入多个数据的multiinsert(int i, int n, int item[])函数&#…

Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册

Unity 开发人员的城堡游戏引擎概述 一、简介2. Unity相当于什么GameObject?3. 如何设计一个由多种资产、生物等组成的关卡?4. 在哪里放置特定角色的代码(例如生物、物品)?Unity 中“向 GameObject 添加 MonoBehaviour”…

Vue3大屏项目实现数字跳动的效果

一、vue-count-to组件&#xff1a; 1、安装&#xff1a; npm install vue3-count-to --save 2、使用&#xff1a; <template><BaseCountTo:startVal"startVal":endVal"endVal":duration"duration":decimals"decimals":pr…

基于复旦微的FMQL45T900全国产化ARM核心模块(100%国产化)

TES745D是一款基于上海复旦微电子FMQL45T900的全国产化ARM核心板。该核心板将复旦微的FMQL45T900&#xff08;与XILINX的XC7Z045-2FFG900I兼容&#xff09;的最小系统集成在了一个87*117mm的核心板上&#xff0c;可以作为一个核心模块&#xff0c;进行功能性扩展&#xff0c;能…

Redis 五大类型源码及底层实现

面试题&#xff1a; 谈谈Redis数据类型的底层数据结构&#xff1a; SDS动态字符串双向链表玉缩列表ziplist哈希表hashtable跳表kiplist整数集合intset快速列表quicklist紧凑列表listpack Redis源代码的核心部分 官网&#xff1a;GitHub - redis/redis: Redis is an in-memory…