我在我便宜的虚拟机上运行非常困难的PHP脚本,每周有大约50万页的浏览量,所以这是有点问题。 我每天重新启动我的mysql两次。 这不会是问题,但重新启动MySQL时
/etc/init.d/mysql restart
它重新启动,然后它有时会说, Table './forum/phpbb_posts' is marked as crashed and last (automatic?) repair failed
这个表与这个难以理解的剧本没有任何关系,但是它却是250 000(1.8 gig)的表格,似乎崩溃了。 修理那个需要大约14分钟。
有没有更安全的方法来停止MySQL? 我知道我应该做备份,而且我这样做,但是每天只有一次数据还在增长(这些日子并不快)
目前在Debian GNU / Linux 6.0上运行
503网站停止活动(.htaccess维护模式)并开始监视mysqld cpu使用情况
mysqladmin -p flush-tables
观看mysql活动(可能需要几分钟时间,具体取决于您的安装)以及何时逐渐消失
mysqladmin -p flush-tables
只要确定然后
mysqladmin -pclosures
这个序列可以确保你的网站停止创build更多的数据库请求,告诉mysql将内存中的数据和事务日志文件刷新到数据库表中,然后启动正确的数据库守护进程closures。
closuresmysqld可能是一个耗时的任务。 最大的问题之一就是所有的数据都被正确地刷新了,所有的表都closures了。
有两种方法可以确保正确closures数据。 它分为两个基本类别:
如果绝对所有数据都是MyISAM,那么应该确保InnoDB完全禁用
[mysqld] skip-innodb
在启动时使用此选项可绕过任何通常在启动时执行的故障恢复周期的InnoDB协议。 将此与MyISAM数据从不caching的事实结合起来。 只有索引页被存储在MyISAM密钥caching中(由key_buffer_size决定)。 因此,你有快速启动和快速关机。
如果大部分或全部数据都是InnoDB,则必须注意为innodb_buffer_pool_sizeconfiguration的空间量。 innodb_buffer_pool_size越大,清除脏页所需的时间就越长。
旁注 :执行InnoDB表的mysqldumps会自动触发缓冲池中所有属于被转储表的脏页的刷新。
无论你是mysqldump所有InnoDB表还是只closuresmysql,都只有一个加速刷新脏页的过程。
您必须设置innodb_max_dirty_pages_pct 。 默认情况下,MySQL 5.0 / 5.1是90。 对于MySQL 5.5,缺省值是75.令人惊讶的是,只需将innodb_max_dirty_pages_pct设置为0.这将使缓冲池中的脏页数量保持最小。 这可能会略微增加磁盘I / O,但仍在可接受的范围内。
你必须做两件事:
请把它放在/etc/my.cnf中
[mysqld] innodb_max_dirty_pages_pct=0
其次,你将不必重新启动MySQL。 只需以root用户身份执行此操作即可:
SET GLOBAL innodb_max_dirty_pages_pct = 0;
服务器负载可能会激增一点,并保持这种方式,直到缓冲池小于1%的脏页面。
试一试 !!!
你也应该先运行这个MySQL命令
SET GLOBAL innodb_fast_shutdown = 0;
这将导致InnoDB事务日志(ib_logfile0,ib_logfile1)中的所有内容完全刷新,然后是
service mysql stop
怎么样打破僵局,开始团呢? 也许重启在启动之前没有给数据库足够的时间来达到静止的停止?
即
/etc/init.d/mysql stop; sync; sleep 30; /etc/init.d/mysql start