- 博客(375)
- 收藏
- 关注
原创 【Redis】安装Redis,通用命令
客户端-服务器模型与 MySQL 等主流数据库系统类似,Redis 也严格遵循客户端-服务器 (Client-Server, C/S) 架构模型。服务端 (这是 Redis 的核心,一个常驻运行的后台进程。它负责数据存储、管理、执行命令、处理持久化、维护数据结构等核心功能。服务端通常运行在指定的服务器或主机上,监听配置的 TCP 端口(默认是著名的6379端口),等待客户端的连接请求。值得注意的是,Redis 服务端在处理命令时是单线程。
2025-08-04 16:21:47
663
原创 【MySQL集群架构与实践5】使用Docker实现水平分片
在数据库中有些表中存的数据一般不怎么改变,比如用于配置的表,也就是常说的字典表,这种类型的表在表关联查询时也会被经常使用,在分布式场景中,这类表在每个数据源中都保存一个复本,可以减少跨库关联提升查询效率。广播表: 指所有分片数据源中都存在的表,表结构及表中的数据在每个数据库中完全一致,适用于数据量不大且需要与海量数据表进行关联的场景。插入、更新操作会实时在所有数据节点上执行,保持各个分片的数据一致性查询时只从一个数据节点获取数据可以和任何一个表进行表关联查询深入理解广播表。
2025-08-02 18:03:59
1140
1
原创 【MySQL集群架构与实践4】实现垂直分库
为缓解数据库压力,需要将不同功能模块对应的表分散存储到独立的数据库中——即采用。ShardingSphere-Proxy 是一个透明的数据库代理,它允许你像连接普通 MySQL 服务器一样连接它,但它背后可以管理多个数据库实例,实现分库分表、读写分离等高级功能。actualDataNodes:真实数据节点,由于垂直分库把不同的表分散在了不同的数据器上,要指定具体的数据节点,可以使用 数据源.表名 的方式。如果我们想要远程登陆这个服务器的话,需要去云服务器里面的防火墙和安全组里面开放这个3307端口。
2025-07-31 18:44:50
972
原创 【MySQL集群架构与实践3】使用Dcoker实现读写分离
那这里面具体要填放什么东西呢?我们去看看我们使用二进制发布包安装的 ShardingSphere Proxy里面的conf目录看看,那里也有一个config-readwrite-splitting.yaml,这个文件是系统提供给我们的模板,这个文件默认里面全是注释,我们只需要在它的基础之上进行修改即可。在config-readwrite-splitting.yaml里面官方其实已经就帮我们写了一些模板,只不过默认是被注释掉了,我们只需要进去修改。
2025-07-31 15:48:13
725
原创 【 MySQL集群架构与实践2】高性能架构模式,ShardingSphere的安装
读写分离通过将读写操作路由到不同的数据库节点,有效分散了负载,是提升数据库并发处理能力、系统响应速度和整体韧性的关键技术手段,尤其适用于读操作远多于写操作的应用场景。
2025-07-30 13:41:13
1038
原创 【 MySQL集群架构与实践1】使用Docker实现简单主从复制
在当前互联网环境下,网站业务量不断增长,对系统可用性和性能提出了更高的要求。MySQL集群是一个高可用、高性能的数据库解决方案,旨在满足大规模应用程序对数据访问的需求。性能提升:通过将负载分散到多个服务器,集群可以显著提升数据库的读、写的性能。高可用性:MySQL集群通过数据冗余和故障转移机制确保高可用性。即使某个节点发生故障,其他节点仍能继续提供服务。扩展性:集群可以通过添加更多节点,来水平扩展系统的容量和处理能力。数据一致性:通过复制和同步技术,集群模式可以确保数据在多个节点间的一致性。读写分离。
2025-07-29 10:10:03
834
原创 【MySQL数据库备份与恢复2】备份的三种常用方法
mysqldump客户端程序可以执行逻辑备份并生成一组SQL语句,其中包含原始数据库和表的定义以及表中的数据,以便实现对数据库的简单备份或复制。mysqldump命令可以生成CSV、或XML格式的文件。简单灵活:是一个命令行工具,使用相对简单不需要复杂的配置,提供了各种选项和参数,可以按需备份数据库的结构和数据,包括表格结构、数据、触发器、存储过程等。跨平台支持:适用于多个操作系统,包括Windows、Linux和Mac等。
2025-07-26 21:24:50
724
原创 【MySQL数据库备份与恢复1】二进制日志,mysqlbinlog
二进制日志(Binary Log,简称 binlog)是 MySQL 数据库中最为关键的日志之一。它以离散的“事件”形式,精准记录所有对数据库结构或数据进行修改的操作,包括数据定义语言 (DDL)语句(例如CREATEALTERDROP)和数据操作语言 (DML)语句(例如INSERTUPDATEDELETE典型的记录内容包括但不限于表的创建、修改以及表数据的变更历史。需要明确的是,二进制日志通常不会记录不修改数据的操作,如SELECT查询或SHOW命令。除了记录操作本身,二进制日志还包含了重要的元数据。
2025-07-24 18:02:37
781
原创 【MySQL进阶】EXPLAIN执行计划
数据库性能优化是一个涉及多个层面的综合性工作,涵盖配置、调优和性能评估等多个环节。优化单个SQL查询。优化整个应用程序的数据库访问模式。优化单个数据库服务器的配置与资源使用。优化多个联网数据库服务器(如集群、读写分离)的协作与数据分布。影响性能的关键层级数据库软件层面的因素(如表结构设计、查询语句效率、数据库配置参数)是性能的基础,它们最终会转化为硬件层面的CPU计算和I/O操作。深入理解数据库软件本身(如SQL语法、索引机制、配置项)的优化规则是首要任务。
2025-07-23 16:22:10
998
原创 【MySQL进阶】E-R图,逆向查看EER图
实体-关系图(Entity-Relationship Diagram),简称 E-R 图,也称为实体-联系模型(Entity-Relationship Model)或E-R 模型。它是一种概念数据模型的图形化表示工具,核心作用在于清晰、直观地描述现实世界中业务领域的数据结构及其内在联系。核心构成要素:代表具有独立存在意义且可被区分的业务对象或概念(如“学生”、“课程”、“部门”、“订单”),通常用矩形表示。描述实体所具有的特征或性质(如“学生”实体的“学号”、“姓名”、“专业”),通常用椭圆。
2025-07-21 12:05:13
1365
原创 【MySQL进阶】三大范式
定义第二范式 (2NF)是关系数据库规范化过程的第二个层级。一个关系(表)满足第二范式,当且仅当它同时满足以下两个条件:满足第一范式 (1NF):该表的所有属性(列)都已经是原子的(不可再分)。消除部分函数依赖:不存在任何非主属性(非关键字段)对表的任何候选键存在部分函数依赖。表中一个或多个属性(列)组成的最小集合,该集合的值能够唯一标识表中的每一行数据(元组)。关键特性:不同的行,其候选键的值必定不同。这是候选键存在的根本前提。构成候选键的属性集合是最小的。这意味着。
2025-07-20 17:57:43
1168
原创 【MySQL进阶】存储过程与触发器
我们在开头的时候留下了这么一些问题本节可以解决的问题(面试题)存储过程的作用是什么?如何创建一个存储过程?MySQL中的变量都有哪几种?如何定义一个变量?MySQL中使用变量是否需要提前声明?MySQL中的参数分为哪几种?用过游标吗?游标的作用是什么?了解条件处理程序吗?介绍一下如何使用?存储函数与存储过程的区别是什么?如何查看数据库中创建的存储过程?什么是触发器?MySQL中触发器分为几种类型?行级触发器与语句级触器的区别是什么?说一下了解的触发器使用场景有哪些?
2025-07-20 10:39:31
1049
原创 【MySQL事务】锁简介
目录一.锁1.1 锁信息1.2 共享锁和独占锁 - Shared and Exclusive Locks1.3 意向锁 - Intention Locks1.4 索引记录锁 - Record Locks1.5 间隙锁 - Gap Locks1.6 临键锁 - Next-Key Locks1.7 插入意向锁 - Insert Intention Locks1.8 AUTO-INC Locks1.9 死锁1.9.1.死锁产生的条件(非常重要)1.9.2.InnoDB对死锁的检测1.9.3.如何避免死锁实现事务隔
2025-07-17 14:19:18
781
原创 【MySQL事务】回顾事务
什么是事务?事务是把一组SQL语句打包成为一个整体,在这组SQL的执行过程中,要么全部成功,要么全部失败,这组SQL语句可以是一条也可以是多余。你可以把事务想象成一个“不可分割的操作流程”。它把多个相关的操作打包成一个整体“要么全部成功完成,要么全部像没发生过一样撤销”。中间状态(比如只完成了一部分)是不允许存在的。张三账户有1000元。李四账户有1000元。现在,张三要给李四转账100元。这个操作在计算机系统内部实际上需要两个独立的步骤从张三账户里扣除100元。往李四账户里增加100元。
2025-07-16 17:47:23
934
原创 【InnoDB磁盘结构4】重做日志——Redo Log
首先来聊聊什么是重做日志?直接修改账本的风险每次交易(如“张三存款从 100 元改为 150 元”)时,如果直接擦掉旧数字写新数字,突然停电会导致账本丢失修改(100 被擦除,150 未写完),数据彻底损坏。Redo 日志的解决方案你准备一个“操作备忘录记录操作不直接改账本,而是先在备忘录写一条记录在账本第 5 页第 3 行,将数字 100 改为 150。快速保存:写完这条记录,立刻把备忘录存进保险箱(磁盘)。延后改账本:等系统空闲时,再根据备忘录批量修改账本。崩溃后的恢复。
2025-07-16 11:09:21
1071
原创 【InnoDB磁盘结构3】撤销表空间,Undo日志
想象一下撤销日志是什么?把数据库想象成一个巨大的、不断更新的电子表格。撤销日志就像是这个电子表格的“时光胶卷”或者“操作回放录像带”。它的核心任务非常简单却至关重要:记住每一个数据在被修改之前的样子。比如,你要把单元格 A1 的值从100改成200。在数据库(具体是 InnoDB 引擎)真正动手把100擦掉写上200的那一瞬间之前"位置:A1, 旧值:100, 修改时间/事务ID:X"这个“小本本”(撤销日志)就专门用来存储这些“修改前的快照”。撤销日志的核心作用(为什么需要它?
2025-07-14 17:55:30
556
原创 【InnoDB磁盘结构2】通用表空间,临时表空间
我先不说太多,我们先看个例子use db1;-- 创建部门表-- 创建员工表(包含关联部门表的id)-- 向部门表插入数据('技术部'),('市场部'),('财务部'),('人力资源部');-- 向员工表插入数据('张三', 1, 15000.00, '2020-03-15'),('李四', 2, 12000.50, '2021-07-22'),('王五', 3, 18000.75, '2019-11-30'),
2025-07-13 16:38:13
1028
原创 【InnoDB磁盘结构1】系统表空间,独立表空间,双写缓冲区
表空间指的就是表空间文件InnoDB存储引擎的表空间包括:系统表空间、独立表空间、通用表空间、临时表空间和撤销表空间本节重点介绍不同表空间的作用关于表空间呢?
2025-07-12 21:17:36
673
原创 【InnoDB存储引擎4】行结构
目录一. InnoDB支持的数据行格式都有哪些?二 . 数据区是怎么存储真实数据的?2.1.主键值2.2.DB_TX_ID和 DB_ROLL_PTR2.3.真实数据区剩余部分三.额外(管理)信息区包含了关于⾏的哪些信息?四.头信息区域包含了哪些信息?五.Null列表有啥作用?列表中的值是什么?六. 变长字段列表有啥作用?列表中的值是什么?6.1.为什么要记录变长字段中数据的真实长度?6.2.如何记录变长字段的实际长度?6.3.读取长度时如何处理粘包问题?七. 其他的⾏格式与DYNAMIC有什么区别?八.总结
2025-07-11 11:18:23
826
原创 【InnoDB存储引擎3】页结构
目录一. 页的大小可以设置吗?二. 页都有哪些分类?我们需要重点学习哪种页?三. 页头和页尾具体包含了哪些信息?四. 数据行有哪些信息组成?五. 如果要查询的数据在某一个页中,如何定位它在页中的位置,一条条遍历吗?——页目录六. 关于事务、索引这些信息在⻚中怎么记录?——数据页头七. 数据⻚的完整结构是什么样的?八.⼩结 页结构在MySQL运⾏的过程中起到了⾮常重要的作⽤,为了能发挥更好的性能,可以结合⾃⼰系统的 业务场景和数据⼤⼩,对⻚相关的系统变量进⾏调整,⻚的⼤⼩就是⼀个⾮常重要的调整项。
2025-07-10 15:22:59
1018
原创 【InnoDB存储引擎2】MySQL存储结构
表空间⽂件是⽤来存储表中数据的⽂件,表空间⽂件的⼤⼩由存储的数据多少决定不同的表空间 ⽂件存储数据的种类也有所不同系统表空间、独⽴表空间、 通⽤表空间、临时表空间和撤销表空间,这些在下⾯的InnoDB架构图中都有体现。表空间与表空间⽂件的关系是什么?表空间可以理解为MYSQL为了管理数据而设计的一种数据结构主要描述的对结构的定义,表空间文件是对定义的具体实现,以文件的形式存在于磁盘上我们举个例子来理解表空间是逻辑管理规则,如同楼房设计图。
2025-07-09 17:46:35
933
原创 【MySQL进阶】MySQL架构
MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器 的连接器。整体架构图如下所⽰:MySQL直接讲其实很复制,我们还是举例来说明比较好。抵达餐厅 & 连接层 (Connection Pool)我们(客户方):相当于应用程序(.NET, Python, PHP等)或MySQL Shell。餐厅地址:相当于MySQL服务器的IP地址和端口号。迎宾员。
2025-07-06 17:04:13
609
原创 【MySQL进阶】在一台机器上运行多个MySQL实例
有时候我们希望在一台机器上运行多个MySQL实例,比如在开发环境测试新的MySQL版本,同时又要保证原有的版本不受影响;要做一些相应的配置。为了降低配置难度,本节将在Windows系统中使用安装器演示配置多个MySQL实例的方法。
2025-07-06 11:32:02
942
原创 【MySQL进阶】错误日志,二进制日志,mysql系统库
MySQL 主从复制是一种异步(或半同步)的数据复制技术,其核心思想是:将一台 MySQL 数据库服务器(主节点/Master)上的数据变更,自动同步到一台或多台其他 MySQL 数据库服务器(从节点/Slave)上。这是唯一接受应用程序写入(增、删、改)操作的数据库服务器。所有对数据的修改都发生在这里。这些服务器不能直接接受写入(或者可以配置为只读,避免冲突),它们的主要任务是忠实地复制主节点上的数据变更。当主节点上的数据发生变更(执行了INSERTUPDATEDELETEDDL。
2025-07-05 17:15:34
819
原创 【MySQL进阶】数据目录,一般查询日志,慢查询日志
mysql服务器在运行的时候会接受各种请求,执行各种SQL语句,记录各种数据,这些操作都会被记录到事件,以日志的形式保存到文件里面去。MySQLServer有以下⼏种⽇志,可以记录服务器正在发⽣的活动。日志类型核心用途默认状态关键特性错误日志记录mysqld在启动、运行或停止时的错误和警告Linux 开启,Windows 关闭关键故障排查依据一般查询日志记录所有客户端连接和接收的SQL语句(含SELECT)关闭可动态开启/关闭,支持写入文件或表慢查询日志。
2025-07-04 16:19:44
870
原创 【MySQL进阶】服务器配置与管理——系统变量,选项,状态变量
我们通常所说的MySQL服务器指的是mysqld程序,这后面这个d就是daemon的意思,也就是守护进程的意思,当运⾏mysqld后对外提供MySQL服务。服务器⽀持的启动选项。可以在命令⾏和配置⽂件中指定这些选项。我们可以在配置文件里面加上[mysqld]来对服务器启动选项进行配置。服务器系统变量。系统变量反映了启动选项的当前状态和值,其中⼀些变量可以在服务器运⾏时修改。系统变量可以被修改的。服务器状态变量。这些变量包含了有关运⾏时操作的计数器和统计信息。
2025-06-27 23:50:00
1021
原创 【MySQL进阶】常用MySQL程序
是 MySQL 官方提供的一个命令行工具,专门用于解析、汇总和分析 MySQL 的慢查询日志文件。它的核心功能是帮助数据库管理员(DBA)和开发者快速识别数据库中执行缓慢的 SQL 语句,以便进行性能优化。在平时使用MySQL数据库时,经常进行查询操作,有些查询语句执行的时间非常长,当执行时间超过设定的阈值时,我们称这个查询为慢查询,慢查询的相关信息通常需要用日志记录下来称为慢查询日志mysqldumpslow可以解析慢查询日志文件并汇总其内容。
2025-06-14 00:40:05
1127
原创 【MySQL进阶】mysqld和mysql,配置文件,客户端命令
就好像我先在/etc/my.cnf设置了port=3305,然后我又在优先级更高的/etc/mysql/my.cnf里面设置了port=3306,那真正设置的port其实是3306。使用给定的选项文件。对于服务器,有一个例外:数据目录中的mysqld-auto.cnf选项文件是最后处理的,因此它甚至优先于命令行选项。例如:mysql --help,可以通过在命令⾏或配置⽂件中指定选项来覆 盖MySQL程序的默认选项值。是重要例外),并且只在当前的客户端会话中有效,不直接影响数据库服务器上的数据或结构。
2025-06-11 22:52:51
1011
1
原创 【Linux】mmap文件映射
mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。如下图所示:看到上面这张图,不知道大家有没有觉得很像System V的共享内存啊?
2025-05-22 17:59:40
1036
原创 【MySQL】使用文件进行交互
在需要输入成千上万条数据的情况下,我们可以使用 CSV(Comma Separated Values,逗号分隔值)格式的文本文件进行输入,这种读取文件的方式称为导入(import)。在执行复杂的 SQL语句的情况下,我们可以将其创建为文本文件,然后执行保存的文件。执行上面这个命令后,mysql会在 下面这个文件夹中,创建 CSV 格式的文本文件 out.csv 用于导出表 th1 中的数据。正如逗号分隔值这个名字所表达的那样,在 CSV 文件中,数据是用逗号隔开的,文件内容仅包含文本。
2025-05-20 00:06:05
1238
原创 【MySQL】存储过程,存储函数,触发器
MySQL存储过程是一种预先编写并存储在数据库中的可重复使用的SQL代码块,它能够通过一个名称被调用执行。存储过程可以包含复杂的逻辑操作,如条件判断、循环、变量操作等,允许将一系列SQL语句组合成一个单元,以便在需要时高效执行。换句话说,就是将多个 SQL 语句组合成一个只需要使用命令“CALL xx”就能执行的集合,该集合就称为存储过程(stored procedure )。“存储”( stored)表示保存,“过程”(procedure)表示步骤。
2025-05-18 17:14:23
1136
原创 【云备份】项目展示&&项目总结
项目模块:1.数据管理模块:内存中使用hash表存储提高访问效率,持久化使用文件存储管理备份数据2.业务处理模块:搭建 http 服务器与客户端进行通信处理客户端的上传,下载,查看请求,并支持断点续传3.热点管理模块:对备份的文件进行热点管理,将长时间无访问文件进行压缩存储,节省磁盘空间。2. 客户端1.数据管理模块:内存中使用hash表存储提高访问效率,持久化使用文件存储管理备份数据2.文件检索模块:基于 c++17 文件系统库,遍历获取指定文件夹下所有文件。
2025-05-07 22:25:48
464
原创 【云备份】客户端开发
涉及序列化,我们服务端是使用JSON,但是我们vs2022没有jsoncpp这个库(我不想安装),所以,我们不使用JSON,我们直接自定义序列化格式:key value,每个key之间使用\n来分割。先讲讲数据管理模块,并不是所有的文件每次都需要上传,我们需要能够判断,哪些文件需要上传,哪些不需要,因此需要将备份的文件信息给管理起来,作为下一次文件是否需要备份的判断。首先我们打开服务端,把没有用的东西都删干净,包括备份的文件信息啊什么的。好,我们现在去启动客户端,下面这个是客户端进程的目录。
2025-05-07 20:11:28
936
原创 【云备份】服务端业务处理模块设计与实现
我知道大家可能不太了解html,不了解也没有关心,我们完全可以去别人的官网上面看看,它们是怎么实现的,然后随便复制一些下来就行,我这里就简单的copy了一些,就是为了让大家简单的看看一下我们大概的html的界面。当服务器收到一个POST方法的/upload请求,则我们认为这是一个文件上传请求,我们就应该解析请求,获得文件数据,将数据写进文件里面,这个文件就备份成功了。我们随机点击那个蓝色的,可是我们点进去,它却不是给我们下载,而是直接给我们看这个文件里面有什么。
2025-05-05 22:30:21
699
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人