预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Mysql入门系列:检查和维护MYSQL数据库表 理想的情况是,MySQL从首次安装以来始终平稳地运行。但有时确实会由于各种原因而出现问题,其范围可以从电源断电到硬件故障到不正常地关闭MySQL服务器(如用kill-9终止服务器或机器崩溃)。诸如这样的情况大部分都超出您的控制范围,它们会导致数据库表的毁坏,尤其是在对表进行修改且未完全写入时所引起的。 本章的重点是检测和解决表的问题,而不论问题是如何引起的。对于表的检查和修复,MySQL管理员最好的朋友是myisamchk和isamchk实用程序。这两个程序有好几个功能,我们已经在第4章讨论了怎样使用它们执行索引键的分布分析和索引的释放与激活。还可以使用它们检查表和修复有问题的表。这使您能在表变坏之前(使表不能使用之前)修正故障。 myisamchk和isamchk提供的全部选项的清单在附录E中。有关其他的背景,请参阅MySQL参考指南的“维护MySQL安装”一章。 表的故障检测和修正的一般过程如下: 1)检查出错的表。如果该表检查通过,则完成任务,否则必须修复它。 2)在开始修复之前对表文件进行拷贝,以防万一。 3)试着修复表。 4)如果修复操作失败,从数据库备份和更新日志中恢复此表。 上述过程的最后一步假定您已经执行了数据库备份并允许更新日志有效。如果不是这样的话,系统将有危险。参考第11章查找一下怎样使用mysqlaump和怎样开启更新日志。您肯定不想不可挽回地丢失一个表,因此,应努力地做备份。 在使用myisamchk或isamchk检查或修复表之前,应该满足一些初步需求: 建立常规的数据库备份过程并允许更新日志,以防事情越来越糟使表的毁坏不能修复。笔者好像在以前提醒过这一点? 在开始试验之前应先仔细地阅读本章的内容。尤其是不应该在阅读“避免与MySQL服务器交互作用”之前进行操作,因为它将讨论当您试图在一个表上执行检查或修复过程时服务器正在使用这个表所引起的问题。它还讨论怎样在服务器运行时防止那些问题发生。 当运行表检查或修复时,您应该被注册在运行mysql的账号下,因为您需要对表文件读写访问。 myisamchk和isamchk的调用语法 MySQL的myisamchk和isamchk实用程序很类似,多数时候它们可以用同样的方式使用。它们之间的主要区别是它们所使用的表的类型。对于MyISAM表,使用myisamchk,而对于ISAM表,则使用isamchk。您可以通过表的索引文件的扩展名来告诉表使用哪种存储格式。扩展名“.MYI”表明是一个MyISAM表,而“.ISM”表明是ISAM表。 为了使用任一个实用程序,应指明您所要检查或修复的表,以及指明要执行的操作类型的选项: %myisamchkoptionstbl_name... %isamchkoptionstbl_name... tbl_name参数可以是表名也可以是该表的索引文件名。如果指定多个表,可以很容易地使用文件名模式来拾取目录中所有相应的文件: %myisamchkoptions*.MYI %isamchkoptions*.ISM 不会因为告诉了错误的程序来检查某个表而使该表毁坏,但是除了发布一条警告消息外此程序不做任何事情。例如,下面的第一条语句将检查当前目录中的所有MyISAM表,而第二条语句只显示一条警告消息: %myisamchk*.MYI正确 %myisamchk*.ISM不正确─文件类型错 不论是myisamchk还是isamchk都不对表所在的位置做任何判断,因此,应该或者在包含表文件的目录中运行程序,或者指定表的路径名。这允许您将表文件拷贝到另一个目录中并用该拷贝进行操作。 检查表 myisamchk和isamchk提供了表检查方法,这些方法在彻底检查表的程度方面有差异。通常用标准方法就足够了。如果标准检查报告没有发现错误而您仍然怀疑有毁坏(或许因为查询没有正常地工作),可能要执行更彻底的检查。要想用任意一个实用程序执行标准的表检查,则不用带任何选项直接调用即可: %myisamchktbl_name %isamchktbl_name 为了执行扩充检查,使用--extend-check选项。该选项非常慢,但检查极为彻底。对于该表的数据文件中的每个记录,索引文件中的每个索引的相关键都被检查以确保它真正指向正确的记录。myisamchk还有一个中间选项--medium-check,它不如扩展检查彻底,但速度快。 如果对于--extend-check检查不报告错误,则可以肯定表是好的。如果您仍然感觉表有问题,那原因肯定在其他地方。应重新检查任何好像有问题的查询以验证查询是正确书写的。如果您认为问题可能是MySQL服务器的原因,应考虑整理一份故障报告或升级到新的版本上。 如果myisam