随笔分类 - mysql源码阅读
mysql源码阅读笔记
摘要:前几天看大佬的公众号,发现一个有意思的问题,即平时应该如何关闭MySQL,如下几种方式,平时应该使用哪种呢: 1. mysqladmin shutdown 2. service mysqld stop 3. kill 'pidof mysqld' 4. kill -9 'pidof mysqld'
阅读全文
摘要:今天 DBA 同事问了一个问题,MySQL在半同步复制的场景下,当关闭从节点时使得从节点的数量 < rpl_semi_sync_master_wait_for_slave_count时,show full processlist 的结果不同,具体表现如下: AFTER_SYNC表现如下: 可以发现,
阅读全文
摘要:在 MYSQL的启动过程中,可以看到在 mysqld_main() 函数的最后调用了 mysqld_socket_acceptor->connection_event_loop() 函数用来处理MySQL的连接,这里通过源码分析一下MySQL连接的建立与使用过程: 1. 在死循环中调用 m_list
阅读全文
摘要:MySQL启动过程中 GTID 的处理: 1. 在核心模块启动函数 init_server_components() 会调用 gtid_server_init() 初始化 gtid server 2. 调用 init_server_auto_options() 初始化并获取数据库的 server_u
阅读全文
摘要:当 MySQL关闭后,重启MySQL时,会进行 crash recovery操作,这里分析一下MySQL是如何进行的: 1. 首先在启动Innodb存储引擎时会回滚事务系统的事务列表中未在Innodb中提交的处于 TRX_STATE_ACTIVE 状态的不完整的事务【在事务的两阶段提交过程中,xa
阅读全文
摘要:Innodb启动过程如下: 1. 初始化innobase_hton,它是一个handlerton类型的指针,以便在server层能够调用存储引擎的接口。 2. Innodb相关参数的检车和初始化,包括系统表空间,临时表空间,undo表空间,redo文件,doublewrite文件等。 3. inno
阅读全文
摘要:mysqld_main() 函数中,init_server_components() 函数负责MySQL核心模块的启动,包括mdl系统,Innodb存储引擎的启动等等: 1. mdl子系统初始化。 2. 初始化 table definition cache 和 hostname cache hash
阅读全文
摘要:MySQL启动流程如下: 1. 设置进程名 2. 处理配置文件及启动参数以及部分模块初始化,这包括: 2.1 从配置文件中读取选项,把他们放在 argc 和 argv 已有的参数之前 2.2 处理标记为 early 的命令行选项,这其中包括:performance_schema,--help相关,b
阅读全文
摘要:MySQL事务的提交采用两阶段提交协议, 前些日子和同事聊的时候发现对提交的细节还是有些模糊,这里对照MySQL源码详细记录一下,版本是MySQL5.7.36。 一. 事务的提交流程。 1. 获取 MDL_key::COMMIT 锁: FTWRL会阻塞 commit 操作。 接下来进入 prepar
阅读全文
摘要:Innodb存储引擎设计了两种同步机制: 1. mutex, 完全的互斥方法 2. rw-lock, 可以给临界资源加上 s-latch或者 x-latch。s-latch允许并发的读操作,x-latch是完全的互斥方式。 1. mutex mutex的数据结构如下所示: struct mutex_
阅读全文
摘要:The basic element of the memory management is called a memoryheap. A memory heap is conceptually astack from which memory can be allocated. The stack
阅读全文