MySQL 可能需要一个多小时才能开始

MySQL can take more than an hour to start

我有一个 mysql (Percona) 5.7 实例,其中包含超过 100 万张表。 当我启动数据库时,可能需要一个多小时才能启动。 错误日志没有显示任何内容,但是当我跟踪 mysqld_safe 时,我发现 MySQL 正在获取数据库中每个文件的统计信息。

知道为什么会发生这种情况吗? 另外,请不要建议修复我的模式,这是一个黑盒子。

谢谢

原来是 2 个问题(除了数百万个表)!

  1. 当 MySQL 启动时,需要崩溃恢复,从 5.7.17 开始,它需要遍历您的数据目录来构建它的字典。这将在未来的版本 (8.0) 中取消,因为 MySQL 将拥有自己的目录,并且不再依赖于 datadir 内容。 Doc states that this isn't done anymore. It's true and false. It doesn't read the 1st page of ibd files, but It does a file stat. Filed Bug
  2. 完成 (1) 后,它会启动一个新进程 "Executing 'SELECT * FROM INFORMATION_SCHEMA.TABLES;' to get a list of tables using the deprecated partition engine."。那当然会再次打开所有文件。如果您认为不需要,请使用 disable-partition-engine-check。 Doc

所有这些都可以使用 sysdig 观察到。非常强大的方便 dtrace 之类的工具。

sysdig proc.name=mysqld | grep "open fd="

好的,现在是减少文件数量的时候了。