B.4.3.3 如果 MySQLcontinue 崩溃该怎么办

每个 MySQL 版本在发布之前都已经在许多平台上进行了测试。这并不意味着 MySQL 中没有错误,但是如果存在错误,则错误应该很少并且很难找到。如果遇到问题,尝试准确找出导致系统崩溃的原因总是有帮助的,因为您更有可能迅速解决问题。

首先,您应该尝试找出问题是mysqld服务器死了还是您的问题与 Client 端有关。您可以通过执行mysqladmin version来检查mysqld服务器已启动多长时间。如果mysqld已死并重新启动,则可以通过查看服务器的错误日志来找到原因。参见第 5.4.2 节“错误日志”

在某些系统上,您可以在错误日志中找到可以使用resolve_stack_dump程序解决的mysqld死亡的堆栈跟踪。参见第 28.5 节“调试和移植 MySQL”。请注意,错误日志中写入的变量值可能并不总是 100%正确。

许多服务器崩溃是由损坏的数据文件或索引文件引起的。在每个 SQL 语句之后且在通知 Client 端结果之前,MySQL 使用write()系统调用更新磁盘上的文件。 (如果在启用delay_key_write系统变量的情况下运行,则情况并非如此,在这种情况下,将写入数据文件,但不会写入索引文件。)这意味着即使mysqld崩溃,数据文件的内容也是安全的,因为 os 会确保未刷新数据写入磁盘。您可以通过使用--flush选项启动mysqld来强制 MySQL 在每个 SQL 语句之后将所有内容刷新到磁盘。

前面的意思是,除非发生以下情况之一,否则通常不应该损坏 table:

因为很难知道为什么会崩溃,所以首先尝试检查对其他人有用的东西是否对您造成了崩溃。请尝试以下操作:

backtrace
info local
up
info local
up
info local

使用 gdb ,您还可以检查info threads存在哪些线程,并使用thread N切换到特定线程,其中* N *是线程 ID。

当前的动态行代码已经使用了几年,几乎没有问题,但是动态长度行本质上更容易出错,因此尝试此策略以查看是否有帮助是一个好主意。

首页