摘要:
前几天看大佬的公众号,发现一个有意思的问题,即平时应该如何关闭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的物理备份大多数采用xtrabackupex进行,其备份过程如下图所示,这里通过解析 xtrabackup 的源码来详细看看其是如何进行备份的,xtrabackup 版本为 2.4.26。 这里只解析其全量备份的过程,通过源码可以发现很多细节,其核心详细的备份流程如下: 1. 从 lo 阅读全文
摘要:
在 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 阅读全文
摘要:
MySQL启动流程如下: 1. 设置进程名 2. 处理配置文件及启动参数以及部分模块初始化,这包括: 2.1 从配置文件中读取选项,把他们放在 argc 和 argv 已有的参数之前 2.2 处理标记为 early 的命令行选项,这其中包括:performance_schema,--help相关,b 阅读全文
摘要:
mysqld_main() 函数中,init_server_components() 函数负责MySQL核心模块的启动,包括mdl系统,Innodb存储引擎的启动等等: 1. mdl子系统初始化。 2. 初始化 table definition cache 和 hostname cache hash 阅读全文
摘要:
因为 pt-osc 对数据库性能影响较大,且容易造成死锁问题,目前我们在线更改表结构都使用 gh-ost 工具进行修改,这里记录一下使用 gh-ost 过程中的问题,以作记录;首先先复习一下gh-ost的基本实现,gh-ost的基本实现原理如下图所示: 根据源码,核心步骤如下: 1. initiat 阅读全文