MySQL
文章平均质量分 80
Li_Xiang_996
这个作者很懒,什么都没留下…
展开
-
MySQL新的版本发布模型 - 创新版本和长支持版本
2023年7月18日,MySQL发布了最新数据库服务器版本8.1.0,其中变化最大的是MySQL采用了新的版本发布模型。除了包含缺陷修复,还可能包含已经稳定的新特性。新模型可以让MySQL更快的引入型特性,但是频繁的变化对与用户来说是个挑战,对于一个稳定的生产系统,我们通常需要的是缺陷修复,而不是引入变化。这种模型有一个缺点: 新特性只在大版本发布,而大版本发布周期通常很长(通常2年),虽然保持了版本稳定,但新特性发布比较慢。原创 2023-08-15 11:29:13 · 1056 阅读 · 0 评论 -
InnoDB文件物理结构解析7 - FIL_PAGE_SDI
其中一个重要的改变就是,从8.0版本开始,MySQL废弃了.frm文件(还包括.par,.TRN,.TRG, .isl,db.opt,ddl_log.log ),MySQL使用字典信息序列化格式(serialized form)来存储数据字典,这部分数据称为serialized dictionary information (SDI),MySQL将SDI存放对应表的表空间中,并引入新的Page如:FIL_PAGE_SDI来存放SDI的数据。语句获取film表的DDL语句。视图获取表元数据信息。原创 2023-08-14 19:17:10 · 250 阅读 · 0 评论 -
InnoDB文件物理结构解析6 - FIL_PAGE_INDEX
InnoDB中,非主键索引(组合索引)字段是允许包含空值的。记录内容中,最前面部分存放索引的字段,后面接着索引字段值对应的主键值,记录内容不包含DB_TRX_ID和DB_ROLL_PTR伪字段。由输出可以看到,InnoDB索引,记录的是索引值对应的主键值,而不是行记录的地址,这与Oracle数据库的索引是不同的,或许与InnoDB是索引组织表有关,行记录存储在主键中。索引深度level>0时,根据非叶子节点内的值范围找叶子节点,再根据所在叶节点中找到对应的主键值,然后根据主键"回表",找到对应行记录。原创 2023-08-14 17:25:13 · 226 阅读 · 0 评论 -
InnoDB文件物理结构解析5 - FIL_PAGE_INDEX
如果执行的是"truncate sakila.film",该方法是无效的,因为整个ibd文件的存储空间会被"重置"(文件会变小,没有page(14)),全表删除(“delete from sakila.film”)通常不会,但也有特例,当一个表的数据量非常小(索引深度小于1),所有的行都在一个(Leaf) Page时,观察到全表删除和truncate一样,整个页的记录数据会被清掉(置为00),可以通过hexdump确认。程序输出和我们预想的一样,记录虽然被delete语句删除了,但是数据还是保留在页内的。原创 2023-08-14 17:16:33 · 145 阅读 · 0 评论 -
InnoDB文件物理结构解析4 - FIL_PAGE_INDEX
null-bitmap前面是variable-field-lengths部分,该部分是可变长字段的长度列表,该列表也是可变长的,要读取同样需要先确定列表的长度。当你的一个表,只有几行数据时,那么你可以观察到page(4)的page_level=0,这是一个Clustered Key Leaf Page,表所有的行记录都存储在该页内,当你不断往里面插入数据,该页无法容纳所有记录时,page(4)的会变成Clustered Key Non-Leaf Page,原来page(4)中的数据会分散到其它的叶节点内。原创 2023-08-11 18:14:58 · 197 阅读 · 0 评论 -
InnoDB文件物理结构解析3 - FIL_PAGE_INDEX
infimum的Next Record Offset是一个指针,指向的是下一条记录的位置,这个下一条记录位置到底是什么位置?因为案例的page(4)的page_level=1,也就是说存放的是非叶子节点,所以记录类型都是REC_STATUS_NODE_PTR,我们可以看到最后一条记录指向的位置(next_pos)为112,通过System_Records的结构图,可知这是supermum记录的"Next Record Offset(2 bytes)"位置,说明记录到此遍历完成。原创 2023-08-11 17:53:31 · 172 阅读 · 0 评论 -
InnoDB文件物理结构解析2 - FIL_PAGE_INDEX
InnoDB的FIL_PAGE_INDEX物理结构解析。原创 2023-08-11 17:39:55 · 223 阅读 · 0 评论 -
InnoDB文件物理结构解析1 - 概述
InnoDB数据文件解析。原创 2023-08-11 16:54:09 · 196 阅读 · 0 评论 -
解析InnoDB(.ibd)存储结构
一直都对innodb的文件结构非常感兴趣 , 最近又翻了翻Jeremy Cole关于InnoDB的文章(https://blog.jcole.us/2013/01/03/the-basics-of-innodb-space-file-layout/), 手又痒痒, 用Java写了一个解析innodb数据文件(.ibd)文件的小程序, 可以对.ibd的基本存储单位页(Page)的页头页和页尾进行解析。想做为一个开始, 后续如果有精力且资料充足的情况下, 会把逐步将innodb主要的Page都解析出来。原创 2023-06-15 11:14:20 · 449 阅读 · 0 评论 -
Tuning the XFS file System
网络上非常多的关于数据库文件系统调优的文章,里面的秘籍是不是都是真的,还是瞎折腾?Don’t Trust it, Test it!其中一个来自希捷的文档"https://www.seagate.com/files/www-content/support-content/solid-state-flash-storage/accelerator-cards/_shared/masters/seagate-ssds-linux-and-mysql-tpc-c-optimizations-application原创 2021-02-04 09:39:07 · 392 阅读 · 0 评论 -
tpcc-dbcp -- 基于java和apache dbcp实现的一个tpcc测试工具
1. 关于tpcc-dbcp之前学习mysql,经常使用percona开发的tpcc-mysql,模拟业务负载。但tpcc-mysql本身已经不更新了,只能支持mysql数据库,且数据加载时单线程的,大数据量装载数据非常慢。所以最近花了些时间,参考了tpcc-mysql,用java和apache的数据库连接池(dbcp),就有了tpcc-dbcp这样一个类tpcc-mysql的测试软件。相较于tpcc-mysql: - 支持多种数据库: MySQL, PostgreSQL, Oracle, DB2,原创 2021-01-18 16:52:41 · 417 阅读 · 0 评论 -
MySQL组复制学习笔记(基于MySQL 8+) -- 使用篇
3.1. 启动/停止可以通过start/stop group_replication来启动停止组复制进程.mysql> start group_replication; /* 启动MySQL组复制相关线程, 启动对应端口的监听, 如,33061 */mysql> stop group_replicaiton; /* 关闭MySQL组复制相关进程*/可以通过group_replication_start_on_boot变量来指定是否随着MySQL启动而启动, 如果组没有其他成员, 第一原创 2020-05-19 15:59:21 · 2511 阅读 · 0 评论 -
MySQL组复制学习笔记(基于MySQL 8+) -- 部署篇
组复制组内每个数据库服务器实例运行在单独的硬件主机上,这时推荐的部署方式,但这不是强制的。组复制首先需要安装3个MySQL数据库, MySQL8.0内建提供了组复制插件, 安装没有特殊要求, 本文不介绍。组复制最少需要3个MySQL服务器实例。2.1. 组复制的需求与限制组复制需求:1). 数据必须放在InnoDB存储引擎, 禁用除InnoDB之外的其他存储引擎, 对应的配置项: disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,原创 2020-05-13 17:41:33 · 367 阅读 · 0 评论 -
MySQL组复制学习笔记(基于MySQL 8+) -- 概述篇
前言: 本文主要翻译摘抄自<<MySQL 8.0 Reference Manual>>的"Group Replication"章节, 由于个人能力有限,肯定有理解不对的地方,仅供参考,官方文档写得很细,推荐细读。MySQL组复制(MySQL Group Replication, MGR)是MySQL在5.7.17 GA版本发布的数据库高可用解决方案(Group Replication is a technique that can be used to implement faul原创 2020-05-13 10:10:51 · 206 阅读 · 0 评论 -
MySQL主从复制常见问题处理(基于percona-toolkit)
在MySQL主从数据复制环境中,常见得错误包括, 主键冲突(1062), 表或者数据库不存在(1146), 从库行不存在(1032),… 这通常是由于在从库执行了数据修改的语句或脚本, 把从库置为只读(read_only=1)可以减少这类错误,但是该参数对root用户无效,所以并不能完全避免。根源来说这类报错的原因在于主库和从库的数据不一致。网上涉及这类的文章很多,大部分(别人文档的搬运工)介绍...原创 2019-12-03 15:41:19 · 625 阅读 · 0 评论 -
BinlogMiner 1.1.2 版本发布
新版本说明BinlogMiner是一个基于Java语言开发,提供了一套可用于MySQL二进制文件分析的API和基于这些API实现的二进制日志分析挖掘工具。BinlogMiner 1.1.b版本的更新:增加了一个MySQL二进制文件分析程序(binlogparser), 相较于自带的mysqlbinlog, binlogparser有如下特性:– 可以基于GTID来指定需要解析的范围;–...原创 2019-11-29 10:33:02 · 134 阅读 · 0 评论 -
MySQL二进制日志分析-TABLE_MAP_EVENT
TABLE_MAP_EVENT用于描述即将发生变化的表的结构。当用户提交一条修改语句时(如, insert, update, delete),MySQL会产生2个Binlog事件: 第一个就是TABLE_MAP_EVENT,用于描述改变对应表的结构(表名, 列的数据类型等信息);紧接着的是ROWS_EVENT,用于描述对应表的行的变化值,后续会接着介绍。先看TABLE_MAP_EVENT的官方定...原创 2019-10-25 11:51:46 · 876 阅读 · 0 评论 -
MySQL二进制日志分析-QUERY_EVENT(包含代码实现)
QUERY_EVENT用于记录MySQL服务器中执行的SQL语句,早期版本无论是DDL还是DML的语句,都是记录在QUERY_EVENT中,如前文所说,由于基于语句的复制( statement-based replication - SBR)有很多问题,后续版本引入了ROWS_EVENT,DML语句可以基于值(行)复制(row-based replication - RBR)。基于语句的优势在于数...原创 2019-10-25 11:37:52 · 788 阅读 · 0 评论 -
MySQL二进制日志分析-FORMAT_DESCRIPTION_EVENT(包含代码实现)
如前文概述,MySQL Binlog v3以前版本, 二进制日志文件的第一个事件是START_EVENT_V3, 从v4版本开始第一个事件为FORMAT_DESCRIPTION_EVENT(以下简称FD事件),替代掉START_EVENT_V3。具体到MySQL服务器版本来说,MySQL 5.0以前版本二进制日志的第一个事件是START_EVENT_V3,而后续版本的第一个事件都是FD事件,由于目...原创 2019-10-25 11:23:11 · 704 阅读 · 0 评论 -
MySQL二进制日志分析-概述篇
MySQL从3.23版本开始引入了二进制日志,用于的数据复制, 二进制日志根据MySQL的版本不同,目前有4个版本:https://dev.mysql.com/doc/internals/en/binlog-version.html Binlog version MySQL Version ------------------+------------------- 1 ...原创 2019-10-25 11:08:39 · 177 阅读 · 0 评论 -
介绍一个自己开发的MySQL二进制日志挖掘器 - BinlogMiner
MySQL从2014年开始超越SQL Server, 占据DB-Engines数据库流行度排行榜第二名, 是一种非常流行的关系型数据库, 特别是在互联网领域, 是一种应该掌握的数据库系统。最近在学MySQL的二进制日志时, 顺手写了个"月光宝盒", 不对…是"BinlogMiner"。BinlogMiner基于Java语言开发,提供了一套可用于MySQL二进制文件分析的API和基于这些API实现...原创 2019-10-25 10:58:36 · 415 阅读 · 6 评论