我想知道如果一个“服务mysqld重启”将自动执行一个干净的清洗表在重新启动服务之前。
我有5.0.77与主要MyISAM表的Fedora / CentOS,成千上万。
是的,它会。 事实上,如果你有InnoDB,InnoDB缓冲池中的所有脏页面都会作为closures过程的一部分刷新到磁盘。
如果你想加快这个操作,你应该在/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。
这样做会加快mysqlclosures,因为会有更less的刷新。 这个版本甚至会更明显。
如果你想在没有'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。