E.1.6. 如果出现表崩溃,请生成测试案例

如果在一些更新命令之后,mysqld总是当掉,或者如果你遇到被破坏的表,你可以用下面的操作测试看这个缺陷是否是可重复产生的:

  • 卸掉MySQL守护进程(用mysqladmin shutdown)。

  • 给该表做备份(防止修复操作反而搞坏这种很不可能出现的情况)。

  • myisamchk -s database/*.MYI 检查所有的表,用myisamchk -r database/table.MYI修理有错误的表。

  • 对该表做第二次备份。

  • 如果需要更多的空间就从MySQL数据库目录删除(或移走)旧日志文件。

  • 带--log-bin启动Start mysqld 。请参阅5.11.3节,“二进制日志”。如果你想找出搞mysqld的查询,你应该使用use --log --log-bin。

  • 当你已经遭遇一个被破坏的表时,请停止mysqld server 。

  • 还原备份。

  • 不带--log-bin重启动mysqld 服务器。 

  • 重新执行mysqlbinlog update-log-file | mysql命令。更新的日志用名字hostname-bin.#保存在MySQL数据库目录下。

  • 如果该表再次被破坏,或者你可用上诉命令让mysqld 死掉,你就已经找到可重复产生的缺陷,它应该很容易被修复!可以ftp上传表和二进制日志到 ftp://ftp.mysql.com/pub/mysql/upload/ 然后把它输入我们在 http://bugs.mysql.com/上的缺陷系统。(请注意,/pub/mysql/upload/ 在FTP时是不可以列出(内容)的,所以不能在FTP客户端看见你已经上载的东西。)如果你是一个支持客户,你可以使用 MySQL客户支持中心https://support.mysql.com/ 来 提醒MySQL 技术人员这个问题,让这个问题尽快得到解决。

如果你想缩小问题的范围,你也可以使用 mysql_find_rows脚本来只执行一些 更新语句。

关注编程学问公众号