暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

我的2023-2024年mysql相关文章整理汇总

原创 大大刺猬 2025-02-20
198

为了方便快速的找到以往文章的内容, 这里就做了个汇总. 感觉是不是能写本书 -_-

每篇文章基本上都包含了相关的脚本的. 有几篇其实已经是2025年写的了, 不要在意这些细节.

连接协议

mysql连接协议相关的.

问: 我们可以使用官方的驱动包, 也可以使用第三方的驱动包, 为啥还要自己去解析连接协议呢?
答: 为了更好的理解mysql的运行原理,还能自己开发相关工具. 比如:旁挂审计,日志抽取(还得结合binlog解析工具), 不过这些都已经有大佬写过了.

连接协议

<mysql连接协议解析(1)>,并模拟了一个mysql服务器(某种程度上可以去’骗’漏扫的人): https://www.modb.pro/db/625127

<发送SQL语句并解析返回结果>: https://www.modb.pro/db/625133

<自制读写分离中间件>: https://www.modb.pro/db/625138

<在mysql里面再连接mysql>(恶趣味): https://www.modb.pro/db/625141

<基于SSL的mysql连接 (含mysql流量镜像脚本)>: https://www.modb.pro/db/625143

<caching_sha2_password 认证讲解>: https://www.modb.pro/db/625146

主从协议

从库连接主库的时候, 走的数据包有丢丢区别, 所以分开来看.

<主从协议>: https://www.modb.pro/db/625147
<主从协议2 – GTID解析>: https://www.modb.pro/db/1788113344170905600

frm结构

mysql 5.7版本还是使用的frm文件来记录表元数据信息, 而市场上使用5.7(5.x)的还挺多的, 所以我们也就来解析下frm的结构. 官方的mysqlfrm工具或者第三方的工具(比如dbsake)都因为年代久远, 有丢丢问题(比如精度丢失,类型不支持等). 所以我们就自己解析frm的结构.

<frm文件解析>, 这一版比较简单粗略:
https://cloud.tencent.com/developer/article/2409341

<frm2sdi (1) 再探frm结构> 这一版就很细致了, 但是不含metadata
https://www.modb.pro/db/1880128576226340864

<frm2sdi(3)> 这里面多了frm的metadata信息:
https://www.modb.pro/db/1887686692543410176

sdi结构

mysql 8.0 使用sdi(Serialized Dictionary Information)来存储元数据信息, 并放在了数据文件(ibd)中. sdi page来记录sdi的信息, 实际上就是一个特殊结构的数据行, general tablespace情况下, 就是多行数据; innodb_file_per_table情况下, 就是一行数据(不考虑summary). 这行数据是压缩了的, 所以存在溢出行,得注意下(issue28)

<MYSQL 文件解析 (5) FIL_PAGE_SDI>
最开始讲解的sdi比较简单 https://www.modb.pro/db/625502

<从ibd文件提取DDL和DML> 后面看到官网说是压缩的, 于是直接保留解压 -_-
https://www.modb.pro/db/625500

<mysql.ibd 文件解析 (sdi page)>
https://www.modb.pro/db/1836232133276426240

<frm2sdi (2) sdi内容讲解>
https://www.modb.pro/db/1881155204905709568

myisam 数据文件存储结构

虽然大部分用户都是使用的Innodb存储引擎, 但还是有丢丢使用myisam的用的,而且5.7系统表也是myisam存储引擎的, 所以我们也稍微看看myisam的存储结构吧.

<myisam MYD文件存储格式> 我们只看myd就够了, myi索引就没必要解析了. https://www.modb.pro/db/1796359240637566976

innodb 数据文件存储结构

本系列的大头来了, 目前大部分使用Mysql的都是使用的innodb存储引擎, 所以了解innodb的数据文件ibd的结构就非常有用了.

菜鸟3步曲

<MYSQL INNODB ibd文件详解 (1)>
https://cloud.tencent.com/developer/article/2270548

<MYSQL INNODB ibd文件详解 (2) 提取DDL和DML>
https://cloud.tencent.com/developer/article/2272297

<INNODB ibd文件详解 (3) FIL_PAGE_SDI>
https://cloud.tencent.com/developer/article/2272631

初出茅庐

<MYSQL 时间类型在磁盘上的存储结构>
https://cloud.tencent.com/developer/article/2275562

<mysql 寻找SDI PAGE> 开始领悟sdi结构
https://cloud.tencent.com/developer/article/2340198

渐入佳境

<mysql.ibd 文件解析 (sdi page) (非debug模式下查看隐藏系统表)>
https://cloud.tencent.com/developer/article/2451792

<mysql压缩页原理和解析>
https://cloud.tencent.com/developer/article/2452279

<lz4压缩数据结构并使用Python解析>
https://cloud.tencent.com/developer/article/2453114

<mysql数据加密原理和解析>
https://cloud.tencent.com/developer/article/2454159

<浏览器查看mysql数据文件磁盘结构>
https://cloud.tencent.com/developer/article/2463909

<恢复加密的mysql表>
https://cloud.tencent.com/developer/article/2465128

稳中向好

<varchar长度修改时online DDL能够使用哪种算法?>
https://cloud.tencent.com/developer/article/2468760

<decimal的存储设计>
https://cloud.tencent.com/developer/article/2472025

<REDUNDANT行格式的数据解析>
https://cloud.tencent.com/developer/article/2474311

蓄势待发

<不同pagesize下的xdes计算方法>
https://cloud.tencent.com/developer/article/2478595

<mysql checksum table原理深度分析>
https://cloud.tencent.com/developer/article/2482061

redo/undo (innodb日志文件存储结构)

redo,undo在运维过程中, 基本上不会去管它, 除非undo log特别大了…

<MYSQL REDO LOG文件解析> https://cloud.tencent.com/developer/article/2264786

<mysql undo文件解析(1)> https://cloud.tencent.com/developer/article/2441520

<mysql undo文件解析(2)> https://cloud.tencent.com/developer/article/2443036

binlog 文件存储结构

市面上解析binlog的工具还是灰常多的. 但我们掌握binlog结构之和,可以实现更多的功能, 比如大事务的统计,binlog_cache_size值的计算参考

<解析binlog中的gtid (GTID_LOG_EVENT,PREVIOUS_GTIDS_LOG_EVENT)>
https://www.modb.pro/db/1781217154309378048

<binlog中第一个event FORMAT_DESCRIPTION_EVENT>
https://www.modb.pro/db/1782321141465042944

<[pymysqlbinlog] TABLE_MAP_EVENT>
https://www.modb.pro/db/1782962255633141760

<ROW_EVENT 从BINLOG中提取数据(SQL) & 从BINLOG中回滚数据(SQL)>
https://www.modb.pro/db/1784855323173015552

<QUERY_EVENT & XID_EVENT 解析Binlog获取DDL和commit>
https://www.modb.pro/db/1785212851510120448

<使用pymysqlbinlog来分析BINLOG>
https://www.modb.pro/db/1787044504695558144

xfs 文件系统结构

啊, 不是讲mysql的吗, 为啥要看xfs的结构啊. 其实xfs结构和innodb非常像. 而且对于drop/truncate操作, mysql层面就无能为力了, 只能从fs层来想办法. (xfs的源码非常规范,看起来很舒服.)

<xfs文件系统浅析 – 恢复drop的表> 恢复原理就是: rm的表实际上只是清空了inode中记录的权限,其它信息还是保留的, 目录里面可能会清除inode号, 所以扫描目录的效果不如遍历Inode tree.
https://cloud.tencent.com/developer/article/2457892

其它

一些我觉得有意思的文章或者案例

<自制MYSQL旁挂审计>
https://cloud.tencent.com/developer/article/2259748

<MYSQL命令远程连接SQLITE3 (给sqlite3加个网络连接功能)>
https://cloud.tencent.com/developer/article/2261503

<PYTHON 自作类tar工具 实现 数据归档,压缩,加密功能>
https://cloud.tencent.com/developer/article/2268572

<提取binlog中的DDL> 使用得还挺多的…
https://cloud.tencent.com/developer/article/2291860

<mysql导入数据, 但存储过程注释没了> 就是加-c那个
https://cloud.tencent.com/developer/article/2323373

<ERROR 1356 (HY000): View ‘xxx’ references invalid definer/invoker>
https://cloud.tencent.com/developer/article/2353818

<binlog_cache_size 设置多大合适呢?>
https://cloud.tencent.com/developer/article/2387420

<tdsql 忘记赤兔密码怎么办> 后台是mysql也算mysql吧…
https://cloud.tencent.com/developer/article/2406746

<离谱! 用shell实现mysql_config_editor功能>
https://cloud.tencent.com/developer/article/2394139

<tar解压进度查看>
https://cloud.tencent.com/developer/article/2393601

<MySQL导入数据, 如何查看进度>
https://cloud.tencent.com/developer/article/2390430

<mysqldump 导出进度查看脚本>
https://cloud.tencent.com/developer/article/2425090

<mysql怎么并发导入数据>
https://cloud.tencent.com/developer/article/2392211

<load data 导致主从不一致>
https://cloud.tencent.com/developer/article/2416591

<mysql坏块检查>
https://cloud.tencent.com/developer/article/2447080

<linux审计脚本>
https://cloud.tencent.com/developer/article/2436672

<varchar字段条件为0, 却能查询出来数据? 不是BUG, 是特性!>
https://cloud.tencent.com/developer/article/2433544

<mysql常见连接失败问题汇总>
https://cloud.tencent.com/developer/article/2465657

<mysql checksum table原理深度分析>
https://cloud.tencent.com/developer/article/2482061

<gdb在线修改mysql版本号>
https://cloud.tencent.com/developer/article/2486647

<忘记root密码时, 不需要重启也能强制修改了!>
https://cloud.tencent.com/developer/article/2493715

<mysql主从延迟案例(有索引但无主键)>
https://cloud.tencent.com/developer/article/2489169

标题叫<我的2023-2024年mysql相关文章整理汇总>, 那么我是谁呢?

网名: 大大刺猬 作者简介: 一名mysql dba, 分享python/shell脚本, 著有ibd2sql等工具. 称号/荣誉: oracle ACE Associate, 墨天轮MVP profile: https://ace.oracle.com/apex/ace/profile/ddcw github : https://github.com/ddcw 腾讯云社区: https://cloud.tencent.com/developer/user/1130242 墨天轮社区: https://www.modb.pro/u/17942 公众号: 大大刺猬
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论