如果MySQL依然崩溃你应作些什么
2007-10-29 11:01:11 来源:WEB开发网确保为你的操作系统应用了最新的补丁。
对mysqld使用“--skip-external-locking”选项。在某些系统上,lockd锁定管理器不能正确工作,“--skip-external-locking”选项通知mysqld不使用外部锁定。(这意味着,你不能在相同的数据目录上运行2个mysqld服务器,如果使用myisamchk,必须谨慎。然而,尝试将该选项用作测试也是有益的)。
当mysqld看上去正在运行但并未响应时,是否运行了mysqladmin -u root processlist?某些时候,即使你认为mysqld处于闲置状态时,实际情况并非如此。问题可能是因为所有连接均已使用,或存在某些内部锁定问题。即使在该情况下,mysqladmin -u root processlist通常能够进行连接,并能提供关于当前连接数以及其状态的有用信息。
在运行其他查询的同时,在单独的窗口中运行命令mysqladmin -i 5 status或mysqladmin -i 5 -r status,以生成统计信息。
尝试采用下述方法:
从gdb(或另一个调试器)启动mysqld。
运行测试脚本。
在3个较低层面上输出backtrace(向后跟踪)和局部变量。在gdb中,当mysqld在gdb内崩溃时,可使用下述命令完成该任务:
backtrace
info local
up
info local
up
info local
使用gdb,你还能检查与info线程共存的线程,并切换至特定的线程N,其中,N是线程ID。
尝试用Perl脚本模拟你的应用程序,强制MySQL崩溃或行为异常。
发送正常的缺陷报告。
应比通常的报告更详细。由于MySQL是为很多人提供服务的,它可能因仅存在于你的计算机上的某事崩溃(例如,与你的特定系统库有关的错误)。
如果你遇到与包含动态长度行的表有关的问题,而且你仅使用VARCHAR列(而不是BLOB或TEXT列),可尝试用ALTER TABLE将所有VARCHAR列更改为CHAR列。这样,就会强制MySQL使用固定大小的行。固定大小的行占用的空间略多,但对损坏的容忍度更高。
目前的动态行代码在MySQL AB已使用多年,很少遇到问题,但从本质上看,动态长度行更倾向于出现错误,因此,不妨尝试采用该策略以查看它是否有帮助,这不失为一个好主意。
诊断问题时不要将你的服务器硬件排除在外。有缺陷的硬件能够导致数据损坏。对硬件进行故障诊断与排除操作时,尤其应注意RAM和硬盘驱动器。
更多精彩
赞助商链接