我想知道“service mysqld restart”是否会在重新启动服务之前自动执行清理刷新表。
我有 Fedora/CentOS 5.0.77,主要有 MyISAM 表,有数千个。
答案1
是的。事实上,如果您有 InnoDB,InnoDB 缓冲池中的所有脏页都会在关闭过程中刷新到磁盘。
如果你想加快该操作,你应该在/etc/my.cnf中设置以下参数
[mysqld]
innodb_max_dirty_pages_pct=0
环境默认值为 innodb_max_dirty_pages_pct。设置为零(0)会使 InnoDB 缓冲池保持脏页的最低限度,但会通过更频繁地刷新 InnoDB 缓冲池而稍微增加磁盘 I/O。
innodb_max_dirty_pages_pct 的默认值在 MySQL 5.5 中为 75,在 MySQL 5.5 之前为 90。
这样做可以加快 mysql 关闭速度,因为需要刷新的内容更少。在版本中,这一点会更加明显。
如果你想在不使用“service mysqld restart”的情况下刷新 InnoDB 缓冲池,请运行此命令
SET GLOBAL innodb_max_dirty_pages_pct = 0;
如果涉及复制,STOP SLAVE 也会自动执行。
如果您有 MyISAM,则所有 MyISAM 表也将被刷新,因为如果 MyISAM 表未刷新(例如在发生崩溃时),则崩溃时打开的 MyISAM 表的标题中仍将有一个非零的打开文件数。这会将 MyISAM 表标记为已崩溃。您需要再次对此类表运行 REPAIR TABLE。
如果表没有提交写入的数据但将其保存在 ib_logfiles 中,则 InnoDB 也是如此,因此崩溃恢复在 mysqld 的启动阶段运行。
因此‘service mysqld restart’必须对 MyISAM 和 InnoDB 强制执行 FLUSH TABLES。