锐歌网络 网站运营 建站教程 购物指南 健康知识 绿色军营欢迎您访问锐歌网络 设为首页 | 加入收藏 | 联系站长 
锐歌网络
专注网络技术

您的位置:首页 » mysql » 如果MySQL总是崩溃怎么办?

 

所有MySQL在发布它们之前,在许多平台上被测试。这并不意味着在MySQL中没有任何错误,但是如果有错误,它们是很少的并且很能难发现。如果你有一个问题并且如果你尝试找出究竟是什么摧毁了你的系统,它将总是有帮助的,因为你将有一个更好机会使得它被快速修复。

首先你应该试着找出问题mysqld守护进程是否死掉或你的问题是否与你的客户有关。你可以用mysqladmin version检查你的mysqld服务器正常执行了多长时间,如果mysqld死了,你可以在文件“mysql-data-directory/''hostname''.err”中找到其原因。

因为很难知道一些东西为什么崩溃,首先试着检查为其它人工作的东西是否使你崩溃。请尝试下列事情:

与mysqladmin shutdown停止mysqld守护进程,在所有表上运行myisamchk --silent --force */*.MYI并重启mysqld守护经进程。这将保证你从一个干净的状态运行。

使用mysqld --log并且试着从日志信息确定是否是某个特定的查询杀死了服务器。全部错误的95%与特定的查询有关!通常它是在日志文件中就在MySQL重启之前的最后查询之一。你也许可以使用下列过程验证它:
停止MySQL守护进程(用mysqladmin shutdown)。
在MySQL数据库目录下做文件的一个备份。
与myisamchk -s */*.MYI检查表以验证所有表是正确的。如果有任何表被损坏,用myisamchk -r path-to-table.MYI修复它。
从MySQL数据目录删除(或移走)任何旧的日志文件。
用safe_mysql --log启动服务器。
如果mysqld现在死掉,你可以通过恢复备份并执行mysql < mysql-log-file来测试问题是否是一个特定的查询引起的。当然你可以通过用safe_mysqld --data=path-to-backup-directory启动另一个MySQL服务器,在某个其他目录而不是标准MySQL数据库目录下做后面的测试。
你试用了基准测试吗?他们应该很好地测试MySQL。你也可以增加代码模拟你的应用程序!基准程序可在源代码分发的“bench”目录下找到,或对二进制分发,在你的MySQL安装目录下“sql-bench”目录。
试一下fork_test.pl和fork2_test.pl。
对任何错误检查文件“mysql-data-directory/''hostname''.err”。
如果你配置MySQL以便调试,如果出错,收集可能的错误信息将更容易。使用--with-debug选项的configure重新配置MySQL然后重新编译。见G.1 调试一个 MySQL 服务器。
为调试而配置MySQL使它包含一个安全的内存分配器以便能发现一些错误。它也提供关于正在发生什么的大量输出。
你为你的操作系统使用了最新的补丁吗?
使用mysql的--skip-locking选项.在一些系统上,lockd锁管理器不能正确工作;--skip-locking选项告诉mysqld不使用外部锁。(这意味着你不能在同一个数据上运行两个mysqld服务器而且如果你使用myisamchk,你一定要小心,但是它对为了测试试用选项可能有益。)
当mysqld好象正在运行但没有反应时,你尝试过mysqladmin -u root processlist吗?有时mysqld不是毫无反应,尽管你可能这样认为。问题可能是所有在用的连接,或可能用内部锁定问题。mysqladmin processlist甚至在这些情况下将通常可以进行一个连接,并且能提供有关当前连接数量及其状态的有用信息。
在你运行其他查询时,在一个单独窗口中运行命令mysqladmin -i 5 status,产生统计。
尝试下列步骤:
通过gdb(或其他调试器)启动mysqld。
运行你的测试脚本。
当mysqld核心倾倒(core dump),做back(或你调试器中的回溯-backtrace命令)。
尝试用一个Perl脚本模拟你的应用程序以强制MySQL崩溃或表现不正确。
或发一份正式的错误报告。见2.3 如何报告错误或问题,但是要不平常更详细。因为MySQL为很多人的工作,导致崩溃的东西可能只存在于你的计算机上(例如,与你的特定系统库有关的一个错误)。
如果你的问题有具有动态长度行的表有关,并且你不使用BLOB/TEXT列(但是仅VARCHAR列),你可以用ALTER TABLE试着将全部VARCHAR改为CHAR,这将强制MySQL使用固定尺寸的行。固定尺寸的行占据很小的额外空间,但是更能容忍崩溃!当前动态行的代码在 TCX 至少使用3 年的时间,没有任何问题,但是从本质上讲,动态长度的行对错误更敏感,因此如果上述对你有帮助,尝试一下可能是一个好主意!

  • (分类:网络文章   关键词:健身知识,购物指南,建网站,域名注册,空间租用,企业邮箱,数据库租用,MSSQL数据库,MYSQL数据库,网站推广,网站运营)
  • 您已阅读:如果MySQL总是崩溃怎么办? 您还可以继续阅读↓  或 回到首页看看>>>
  • 上一篇测试mysql是否成功

    测试MySQL MySQL里面有一个简单的数据库例子test,而且它的内部数据库一直保持对权限和帐户的监视,因而先运行mysql看看是否可以工作。 首先启动MySQL: #/etc/rc.d/init.d/mysqlstart 如果一切正常,你将看到以下的信息出现: Startingmysqlddaemonwithdatabasesfrom/va..

  • 下一篇mysql出现连接错误怎么办?

    一个MySQL客户可以两种不同的方式连接mysqld服务器:Unix套接字,它通过在文件系统中的一个文件(缺省“/tmp/mysqld.sock”)进行连接;或TCP/IP,它通过一个端口号连接。Unix套接字比TCP/IP更快,但是只有用在连接同一台计算机上的服务器。如果你不指定主机名或如果你指定特殊的..