- 博客(234)
- 资源 (21)
- 收藏
- 关注
原创 操作系统的运行机制
有的指令有很高的权限。生活经验:我们安装完 Windows 操作系统后,会发现操作系统提供了多种多样的功能,比如“记事本”、“任务管理器”。注:很多人习惯把 Linux、Windows、MacOS 的“小黑框”中使用的命令也称为“指令”,其实这是“交互式命令接口”,注意与本节的“指令”区别。,甚至可以说,一个操作系统只要有内核就够了(eg:Docker—>仅需Linux内核),但操作系统的功能未必都在内核中,如图形化用户界面 GUI。,其中有个二进制位,1表示“内核态”,0表示“用户态”。
2025-03-31 20:17:00
857
原创 深入理解MySQL主从原理
高鹏(网名八怪),《深入理解MySQL主从原理》系列文的作者。 本系列通过GTID、Event、主库、从库、案例分析,五大块来详细讲解主从原理。
2025-03-07 16:01:34
647
原创 GTID模块初始化简介和参数binlog_gtid_simple_recovery
曾经有一个案例,当每次超过参数expire_logs_days的大小而清理binary log时,系统的I/O压力都非常高,最后发现和这里参数binlog_gtid_simple_recovery=false的设置有关,在1.2节中我们已经讲述过,每次清理binarylog时都会触发gtid_pured变量的设置。这个时候,从库的executed_gtids变量是正确的,如1.2节所述,从库的mysql.gtid_executed表包含所有的GTID。的介质在GTID模块初始化时的作用。
2025-03-06 20:00:40
719
原创 mysql.gtid_executed表、gtid_executed变量、gtid_purged变量的修改时机
其处理逻辑依然是通过Gtid_state::update_on_commit函数调入Gtid_state::update_gtids_impl_own_gtid函数进行的。,gtid_executed变量和gtid_purged变量则对应了内部结构体Gtid_state中的executed_gtids和lost_gtids内存数据,它们分别表示。在binary log关闭的状态下,不生成GTID,mysql.gtid_executed表、gtid_executed变量、gtid_purged变量均不更新。
2025-02-26 20:04:14
913
1
原创 GDB调试报错:Program received signal SIGPIPE, Broken pipe(一遍过)
1)使用Vscode gdb attach调试,报错:Broken pipe2)直接使用gdb attach调试,报错:Program received signal SIGPIPE, Broken pipe
2025-02-26 19:58:15
232
原创 GTID的基本概念
这里先解释一下它们的作用,因为后面会用到。具体的Event解析可以参考2.2节和2.3节。GTID_EVENTGTID_EVENT作为DML/DDL的第一个Event,用于描述这个操作的GTID是多少。在MySQL 5.7中,为了支持从库基于LOGICAL_CLOCK的并行回放,封装了last commit和seq number两个值,可以称其为逻辑时钟。
2025-02-25 19:57:08
1040
原创 Can‘t read dir of ‘/etc/my.cnf.d‘ (OS errno 2 - No such file or directory)
如果/etc/my.cnf.d目录下缺少mysql-clients.cnf文件,mysql客户端工具在加载配置文件时会报错,导致无法正常启动。mysql-clients.cnf文件是MySQL客户端工具的配置文件,用于定义客户端工具(如mysql、mysqldump、mysqlbinlog等)的默认行为和参数。2)目录配置文件:/etc/my.cnf.d或/etc/mysql/conf.d。1)全局配置文件:/etc/my.cnf或/etc/mysql/my.cnf。
2025-02-10 15:16:59
420
原创 Centos源码安装MariaDB & 基于GTID主从部署(一遍过)
下载源码编译安装说明:在编译过程中可能会遇到如下错误:解决方案:下载对应文件,并将其复制到对应目录下即可!配置文件如下:初始化文件初始化文件(init.file)内容如下:初始化脚本初始化脚本(initial.sh)如下:启动脚本启动脚本(start.sh)如下:mariadb tree根据自己需要安装,我在本地装了三个实例!连接结果:MySQL复制有两种方式:基于日志点的复制、基于GTID的复制,两种方式都依赖于MySQL二进
2025-01-03 19:04:59
673
原创 数据库新建用户后(Host:%),报错:localhost无法连接
上述连接命令使用127.0.0.1作为主机名,MariaDB在mysql.user表中首先查找Host为127.0.0.1的用户条目,如果没有找到,但是,如果MariaDB在处理连接请求时,由于某些原因(可能是配置问题或权限问题)没有正确识别maxscale@%用户,它可能会退回到使用匿名用户。由于maxscale用户对应的Host是%,理论上应该能够匹配任何主机,包括127.0.0.1和localhost。注意:匿名用户权限很高,非必要情况下,优选删除匿名用户!
2025-01-03 18:49:25
537
原创 InnoDB事务系统(二):事务的实现
因此,无论多少次写入相同的redo log记录,对数据库的实际影响都是相同的。【拓展:Innodb 以页为单位进行磁盘交互,一页大小 16 KB,一页中至少保存两条数据,也就是说当你更新某个页中的一条数据中的一个字段时,它都需要整页更新,而且如果事务修改了很多页,页之间的 block 不是连续的,磁盘还要不停的寻址。例如,页P1的LSN为10000,而数据库启动时,InnoDB检测到写入重做日志中的LSN为13000,并且事务已经提交,那么数据库需要进行恢复操作,将重做日志应用到P1页中。
2024-12-17 20:18:46
1248
1
原创 InnoDB 事务系统(一):认识事务
虽然在大多数的情况下,这并不会导致严重的结果,甚至可能还会带来性能的提升,但是用户首先需要知道严谨的事务标准,并在实际的生产应用中避免可能存在的潜在问题。当用 begin work 开启一个事务时,隐式地包含了一个保存点,当事务通过 rollback work:2 发出部分回滚命令时,事务回滚到保存点 2,接着依次执行,并再次执行到 rollback work:7 ,直到最后的 commit work 操作,这时表示事务结束,除灰色阴影部分的操作外,其余操作都已经执行,并且提交。若非这样,结果会非常可怕。
2024-12-17 19:58:59
1039
原创 InnoDB表
其中,File Header、Page Header、File Trailer 的大小是固定的,分别为 38、56、8 字节,这些空间用来标记该页的一些信息,如 Checksum,数据页所在 B+ 数索引的层数等。如果启用了 innodb_file_per_table 参数,需要注意的是每张表的表空间内存放的只是数据、索引和插入缓冲 Bitmap 页,其他类的数据,如回滚(undo)信息,插入缓冲索引页、系统事务信息,二次写缓冲(Double write buffer)等还是存放在原来的共享表空间内。
2024-12-13 18:59:16
669
原创 MySQL常用运维操作(二):grant赋权语句
在这个grant命令执行完成后, 如果有新的客户端使用用户名ua登录成功, MySQL会为新连接维护一个线程对象, 然后从acl_users数组里查到这个用户的权限, 并将权限值拷贝到这个线程对象中(也就是说,只要新连接建立,其对应线程对象就会获取该用户的super权限)。重点:每次需要判断一个用户对一个数据库读写权限的时候, 都需要遍历一次acl_dbs数组, 根据user、 host和db找到匹配的对象, 然后根据对象的权限位来判断。在T4时刻,执行set global时,权限验证通过。
2024-12-12 20:30:00
1113
原创 MySQL并发控制(二):锁
注:上述说的等值查询是指SQL语句where条件中有等值条件,且该语句会加锁。示例:此处体现了加锁规则1中左开右闭的本质,那就是,如果是范围查询且范围区间为左开右闭,如(5,10],那么加锁范围就是(5,10]。如果是范围查询且范围区间为左闭,如 [5,10] 或 [5, 10),则加锁区间为(0,5] 和(5,10]。(此处主要是针对原则1的总结,不涉及加锁规则中的优化)
2024-12-10 19:58:10
995
原创 MySQL并发控制(一):幻读
如果只在id=5这一行加锁, 而其他行不加锁的话, 会怎么样。下面先来看一下这个场景(注意: 这是我假设的一个场景) :可以看到, session A里执行了三次查询, 分别是Q1、 Q2和Q3。它们的SQL语句相同, 都是select * from t where d=5 for update。这个语句的意思你应该很清楚了, 查所有d=5的行, 而且使用的是当前读, 并且加上写锁。这三个语句的执行结果如上图所示。其中, Q3读到id=1这一行的现象, 被称为“幻读”。
2024-12-06 18:40:38
1127
原创 MySQL索引(五):逻辑相同性能不同
优化器可以选择遍历主键索引,也可以选择遍历索引t_modified, 优化器对比索引大小后发现, 索引t_modified更小, 遍历这个索引比遍历主键索引来得更快。如果你的SQL语句条件用的是where t_modified='2018-7-1’的话, 引擎就会按照上面绿色箭头的路线, 快速定位到 t_modified='2018-7-1’需要的结果。explain的结果里面第二行的key=NULL表示的就是,这个过程是通过遍历主键索引的方式,一个一个地判断tradeid的值是否匹配。
2024-12-04 20:51:25
755
1
原创 MySQL索引(四):字符串索引
(但如果建立前缀索引的对象是身份证号时(一般同一地区身份证号的前几位相同),则需要创建长度较长的前缀索引,才能满足区分度的要求。但是,索引选取的越长, 占用的磁盘空间就越大, 相同的数据页能放下的索引值就越少, 搜索的效率也就会越低。但是, 对于这个查询语句来说, 如果你定义的index2不是email(6)而是email(7) , 也就是说取email字段的前7个字节来构建索引的话, 即满足前缀’zhangss’的记录只有一个, 也能够直接查到ID2, 只扫描一行就结束了。4)使用hash字段。
2024-12-04 20:48:05
1119
原创 MySQL存储管理(二):自增主键
问:表定义自增id用完了会怎样?答:若表定义的自增值达到上限,当再申请下一个id时,得到的值保持不变。-- 创建表t,指定自增id为int的最大值-- 成功插入一行 4294967295-- 查看表t当前自增id*/-- 再次插入一行数据,报主键冲突可以看到第一个insert语句插入数据成功后,这个表的AUTO_INCREMENT没有改变(还是4294967295) , 就导致了第二个insert语句又拿到相同的自增id值, 再试图执行插入语句, 报主键冲突错误。
2024-12-04 20:31:20
1270
原创 MySQL主从复制(七):GTID
GTID(Global Transaction Identifier)是MySQL 5.6及以后版本中引入的一个关键特性,用于在MySQL的复制架构中实现全局唯一的事务标识。GTID以事务为单位管理复制,不再需要靠log_file和log_pos来定位复制位置,在主从切换、故障恢复时更加简单。
2024-12-02 19:16:40
1133
原创 MySQL查询执行(八):Memory引擎
思考:两个group by语句都用了order bynull, 为什么使用内存临时表得到的语句结果里, 0这个值在最后一行;而使用磁盘临时表得到的结果里, 0这个值在第一行?答:答案对应第一小节:内存表的数据组织结构。
2024-11-20 20:06:40
731
原创 MySQL查询执行(六):join查询
到底可不可以使用join如果直接使用join语句, MySQL优化器可能会选择表t1或t2作为驱动表, 这样会影响我们分析SQL语句的执行过程。所以, 为了便于分析执行过程中的性能问题, 我改用straight_join让MySQL使用固定的连接方式执行查询, 这样优化器只会按照我们指定的方式去join。在这个语句里, t1 是驱动表, t2是被驱动表。
2024-11-14 21:08:02
1023
原创 UNIX网络编程-TCP套接字编程(实战)
1)当fork子进程时,必须捕获SIGCHLD信号。2)当捕获信号时,父进程必须处理被中断的系统调用,如accept函数。3)SIGCHLD的信号处理函数必须正确书写,并使用waitpid函数以免留下僵尸进程。
2024-11-12 20:08:02
1003
原创 UNIX网络编程-传输层
传输层主要包括:TCP、UDP、SCTP(流控制传输协议)!绝大多数客户端/服务器网络应用都使用TCP/UDP。SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令。这些传输协议都转而使用网络协议IP:或是IPv4,或是IPv6。尽管可以绕过传输层直接使用IPv4或IPv6,但这种技术(往往称为原始套接字)却极少使用。UDP是一个简单的、不可靠的数据报协议,而TCP是一个复杂、可靠的字节流协议。
2024-10-18 20:12:50
910
原创 UNIX网络编程-简介
要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议(protocal)。大多数网络应用划分为客户端(client)和服务器(server)。在设计网络应用时,确定总是由客户发起请求往往能够简化协议和程序本身。当然一些较为复杂的网络应用还需要异步回调通信,也就是由服务器向客户端发起请求。通常客户端每次只与一个服务器通信,但一个服务器可以同时与多个客户端通信。一个服务器同时处理多个客户端请求:可认为客户端与服务器之间是通过某个网络协议通信的,但实际上这样的通信通常涉及多个网络协议层。
2024-10-17 14:00:19
873
原创 MySQL查询执行(五):查询那么多数据会不会把数据库打爆
思考:我的主机内存只有100G, 现在要对一个200G的大表做全表扫描, 会不会把数据库主机的内存用光了?答:不会。查询的结果是分段发给客户端的,因此扫描全表,查询返回大量的数据,并不会把内存打爆。
2024-10-16 18:57:06
1141
原创 MySQL查询执行(三):显示随机消息
思考:假设有一个英语学习App,首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。如果让你来设计这个SQL语句,你会怎么写呢?
2024-07-28 14:41:10
775
原创 MySQL查询执行(一):count执行慢
MySQL查询处理器是MySQL数据库服务器的组件,它负责执行SQL查询。查询处理器的主要任务是解析查询(把用户提交的SQL查询转换为可以被数据库引擎理解和执行的数据操作指令序列),生成查询计划,然后执行该计划。SQL语句查询编译的步骤:1)语法分析,建立查询分析树;2)生成逻辑计划,将分析树转化为初始查询计划,并优化;(逻辑优化,生成逻辑执行计划)3)生成物理计划,为逻辑计划中的每个操作符选择实现算法以及执行顺序;
2024-07-27 17:06:48
1233
原创 MySQL存储管理(三):分区表
表对应磁盘文件:我在表t中初始化插入了两行记录, 按照定义的分区规则, 这两行记录分别落在p_2018和p_2019这两个分区上。从图中可以看到,这个表包含了一个.frm文件和4个.ibd文件,每个分区对应一个.ibd文件。对于引擎层来说, 这是4个表。对于Server层来说, 这是1个表。注:分区表是由server层定义的,而非引擎层。
2024-06-28 18:35:51
903
原创 Centos MySQL 源码安装(5.6)
注1:5.6 不支持C++ 11及更高版本,所以在编译 MySQL 5.6 时,需将编译器配置改为: C++98 或 C++03 标准。然而,由于您之前定义的 byte 宏,编译器在尝试解析 std::byte 类型的枚举时可能会遇到麻烦,因为它实际上试图将 byte 解释为宏展开,而不是 std::byte 类型。注1:my3307.cnf文件中的/home/mysql80/node3307/mysql为mysql安装路径,根据自己情况进行更改;注:上述安装过程为无密码安装,因此连接时,无需输入密码。
2024-06-21 19:06:57
219
原创 MySQL存储管理(一):删数据
表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。默认情况下,InnoDB存储引擎有一个共享表空间idbdata1,即所有数据都存放在这个表空间内。如果用户启用了参数 innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内。
2024-06-21 18:44:34
1138
原创 MySQL日志(三):数据安全
回答这个问题前,先看一下磁盘、SSD、内存随机读写与顺序读写的性能对比,如下图所示:从上图可以看出两点:1)内存的读写速度比磁盘随机读写高出几个数量级。2)磁盘顺序读写速度堪比内存读写速度。问1:什么是WAL呢?WAL即 Write Ahead Log,WAL的核心思想是,每次更新操作都先写入日志,只做了写日志这一个磁盘操作。这个日志叫做redo log(重做日志),也就是《孔乙己》记账的粉板,在更新完内存写完redo log后,就返回给客户端,本次更新成功。
2024-06-14 19:37:26
951
Go 版本 Etcd 客户端操作 Etcd
2024-03-23
JDBC PrepareStatement 使用(附各种场景 demo)
2024-01-14
//===计算机网络基础知识===//
2023-09-14
编译原理学习视频课件!
2023-08-31
相位差测量电路-非常详细!
2023-04-13
遥感影像配准结果输出tif影像
2022-06-08
根据投影坐标裁剪影像中的目标区域
2022-06-07
高斯正反算(投影坐标转大地坐标、大地坐标转投影坐标)非常好用
2022-05-21
投影坐标与像素坐标间的转换
2022-04-29
高斯正反算设计实现!!!
2022-04-23
MVSIP2017(在VS中用于程序打包的扩展)
2022-04-08
boosts1.7.8标准库
2022-03-21
二值图像细化算法(非常实用)
2022-01-03
多时相影像配准结果使用 Qt 进行模块化显示
2021-12-20
多时相遥感影像变化检测卷帘功能.zip
2021-12-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人