启动/停止MySQL


8

我正在寻求帮助,以了解执行以下命令行时会发生什么:

root@prodn$ service mysqld stop

是的,它关闭了MySQL服务器,因此直到再次启动该服务后,对它的访问不再可用。但是,更具体地说,停止服务时还会发生其他情况吗?请原谅我的新手,但是当mysqld重新启动时,是否表示日志已刷新,部分内存已释放,缓存已清空等?

我问的原因如下:

我们的数据仓库数据库是MySQL数据库,在过去的4个月中,平均花费了8.5个小时。

上星期三,我停止了mysql服务,然后在30分钟后重新启动它。从那以后,我开始注意到整体性能有了巨大的提高 -SELECT / INSERT / UPDATE / DELETE流程更加高效。DW在差不多4个小时前完成了相同数量的数据行

但是,随着时间的流逝,完成时间会增加15-20分钟。因此,我怀疑我可能必须每周重新启动该服务。

有这种行为的解释吗?我不知道还有什么其他问题,但是很高兴知道mysqld服务重启时会发生什么。

谁能对此有所启发?


1
尝试询问serverfault或dba。
gbjbaanb 2013年


1
听起来您的内存中有很多数据需要提交。dev.mysql.com/doc/refman/5.0/en/server-shutdown.html
ethrbunny

@ dat789,ethrbunny已经给出了寻找答案的正确位置。多数民众赞成在第一个地方,你应该找到它。
Mrigesh Raj Shrestha 2013年

Answers:


2

当您发出问题时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_logfile0ib_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

因为这样做可以加快启动速度,也可能使关闭速度更快。


谢谢你 我应该更具体地说明我没有提到的另一方面- 我们在大多数表上都使用MyISAM引擎。与InnoDB相比,这有什么区别吗? 有没有办法在不重新启动mysqld的情况下做同样的事情?如果没有,那将意味着我不得不不时地烦扰我们的系统管理员。而且,原因很简单-自上次重启以来的每一天之后,SELECT / UPDATE / INSERT操作似乎延迟了25-40分钟。重新启动会使其恢复到“优化”时间。我无法解释原因。
dat789

我坚信InnoDB已被禁用。请参见摘录:130422 15:35:31 mysqld_safe 使用/ srv / mysqldb / mysql中的数据库启动mysqld守护进程130422 15:35:33 [注意]插件'FEDERATED'已禁用。130422 15:35:33 [注意]插件'InnoDB'已禁用。130422 15:35:33 [Note]事件计划程序:已加载0个事件130422 15:35:33 [Note] / usr / libexec / mysqld:准备进行连接。版本:'5.5.17'套接字:'/srv/mysqldb/mysql/mysql.sock'端口:3306 MySQL Community Server(GPL)然后如何在不重新启动的情况下刷新对所有.MYI的索引更改?可能?
dat789
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.