当您发出问题时service mysql stop
,发生的事情不仅仅是切断数据库连接。@ethrbunny的注释中的链接已经说明了发生了什么。
我想关注一个特定方面:InnoDB缓冲池。InnoDB必须刷新InnoDB缓冲池的脏页。如果您想知道多少,请在关机之前运行此命令:
SELECT CONCAT(dpbytes/power(1024,expo),' ',SUBSTR(units,expo*2+1,2)) DirtyPages FROM
(SELECT dpbytes,FLOOR(LOG(dpbytes)/LOG(1024)) expo FROM
(SELECT dirty_pages*page_size dpbytes FROM
(SELECT VARIABLE_VALUE dirty_pages FROM information_schema.global_status
WHERE VARIABLE_NAME='Innodb_buffer_pool_pages_dirty') AAA,
(SELECT VARIABLE_VALUE page_size FROM information_schema.global_status
WHERE VARIABLE_NAME='Innodb_page_size') BBB) AA) A,(SELECT ' BKBMBGBTB' units) B;
这将告诉您需要从InnoDB缓冲池中清除多少数据。
请记住,InnoDB在系统表空间(文件ibdata1
)中有许多活动部件。单击此处,查看整个InnoDB基础结构的图片表示。
某些事务性信息的编写方式使您在运行时可以执行崩溃恢复service mysql start
。
可选的
您可以通过运行以下命令从ibdata1和事务日志(ib_logfile0
,ib_logfile1
)中清除所有数据并干净地提交所有事务:
SET GLOBAL innodb_fast_shutdown = 0;
跑步前
service mysql stop
试试看 !!!
更新2013-04-24 07:17 EDT
由于您将MyISAM作为主要存储引擎,因此唯一发生的事情是将索引更改刷新到所有.MYI
有待更改的文件。
我还建议下次关闭mysqld时,在另一个会话中预先运行此命令:
tail -f /var/log/mysqld.log
并观察消息,看看它告诉您mysqld在使用任何存储引擎时正在做什么。如果您绝对没有使用InnoDB表,那么您应该考虑使用以下方法禁用InnoDB:
[mysqld]
skip-innodb
因为这样做可以加快启动速度,也可能使关闭速度更快。