本文也有英文版:English version。
你有没有碰到过 mysqld 进程启动了很长时间也起不来的情况?这时候我们可以用 perf top
命令查看一下 MySQL 进程主要在干什么事情。如果你查看到的信息如下图所示,启动过程中 MySQL 的
主线程(mysqld_main函数开始的线程)
绝大多数的时间都花在了回滚事务上,那么很可能是遇到了大事务回滚。
这种情况最常见的一个场景是一个大事务在写 Binlog 时把磁盘空间占满了,导致了实例的宕机重启。我曾经遇到的最大的 Binlog
文件超过了 114GB。由于 Binlog Cache 的临时文件在写完 Binlog
后才被清理,所以这个事务总共占用了 228GB 的空间。MySQL 的参数
binlog_error_action …