InnoDB中文参考手册---15故障检测与修复
2008-04-30 07:25
369 查看
InnoDB中文参考手册---犬犬(心帆)翻译
15故障检测与修复
一个普遍的规则就是当一个操作挫败或你怀疑是一个bug,你必须查看服务程序mysqld的错误日志(errorlog),通常命名为'hostname'.err,或Windows下的mysql.err。
当进行故障检测并修复时,在命令提示符下运行MySQL服务程序mysqld是一个较好的方式,不要通过safe_mysqld的包装(wrapper)或以Windows服务启动。你可以看到mysqld在命令提示符窗口上的显示,而可以更好地把握什么将要发生。在Windows下,你必须以--console选项运行mysqld-max来使输出直接显示在MS-提示符窗口上。
如果问题与性能有关(performance-related),或你的服务看起来将要挂起,你可以使用InnoDB_monitor来显示InnoDB内部状态的相关信息。如果问题是由于锁定引起,使用InnoDB_lock_monitor。如果问题是在建表时或其它的数据字典操作,使用InnoDB_table_monitor显示InnoDB内部数据字典的内容。如果你怀疑表已损坏,在表上运行CHECKTABLE。
15.1发现并修复数据字典错误的操作
一个特殊的有关表的问题就是MySQL在它自己的数据目录下的.frm文件中保存它自己的数据字典信息,然而InnoDB将它自己的信息保存在数据文件中InnoDB自己的数据字典中。如果你在外部移走了.frm文件,或在MySQL<3.23.44的版本中使用了DROPDATABASE,或在数据字典操作时服务器崩溃了,那么.frm文件可能会因与InnoDB内部的数据字典out-of-sync而结束。
与数据字典out-of-sync的一个故障现象就是CREATETABLE语句的调用失败。那么你必须查看错误日志。如果错误述说为表在InnoDB内部数据字典中已存在,那么一定在InnoDB的数据文件中存在一个孤表(orphanedtable),没有相对应的.frm文件。
InnoDB:Error:tabletest/parentalreadyexistsinInnoDBinternalInnoDB:datadictionary.Haveyoudeletedthe.frmfileInnoDB:andnotusedDROPTABLE?HaveyouusedDROPDATABASEInnoDB:forInnoDBtablesinMySQLversion<=3.23.43?InnoDB:SeetheRestrictionssectionoftheInnoDBmanual.InnoDB:YoucandroptheorphanedtableinsideInnoDBbyInnoDB:creatinganInnoDBtablewiththesamenameinanotherInnoDB:databaseandmovingthe.frmfiletothecurrentdatabase.InnoDB:ThenMySQLthinksthetableexists,andDROPTABLEwillInnoDB:succeed.
你可以跟从上面错误日志中的提示移除(drop)孤表(orphanedtable)。
另一个与数据字典out-of-sync的故障现象就是MySQL提示不能打开一个文件yourtablename.InnoDB的错误。
ERROR1016:Can'topenfile:'child2.InnoDB'.(errno:1)
在错误日志中可以发现:
InnoDB:Cannotfindtabletest/child2fromtheinternaldatadictionaryInnoDB:ofInnoDBthoughthe.frmfileforthetableexists.MaybeyouInnoDB:havedeletedandrecreatedInnoDBdatafilesbuthaveforgottenInnoDB:todeletethecorresponding.frmfilesofInnoDBtables?
意思就是有一个孤的(orphaned).frm文件,在InnoDB中没有相应的表与之对应。可以通过手工删除.frm文件来移除它。
如果在一个ALTERTABLE操作时MySQL崩溃了,你可能会因在InnoDB表空间在存在一个孤的临时表而告终。通过InnoDB_table_monitor,你可以发现一个名为#sql...的表,但是MySQL不允许访问任何一个如此命名的表,你将不能转储(dump)或移除(drop)它。解决办法就是使用从3.23.48开始InnoDB支持的一个特殊的机制。
如果在表空间内存在一个孤表(orphanedtable)#sql...,那么调用1
15故障检测与修复
一个普遍的规则就是当一个操作挫败或你怀疑是一个bug,你必须查看服务程序mysqld的错误日志(errorlog),通常命名为'hostname'.err,或Windows下的mysql.err。
当进行故障检测并修复时,在命令提示符下运行MySQL服务程序mysqld是一个较好的方式,不要通过safe_mysqld的包装(wrapper)或以Windows服务启动。你可以看到mysqld在命令提示符窗口上的显示,而可以更好地把握什么将要发生。在Windows下,你必须以--console选项运行mysqld-max来使输出直接显示在MS-提示符窗口上。
如果问题与性能有关(performance-related),或你的服务看起来将要挂起,你可以使用InnoDB_monitor来显示InnoDB内部状态的相关信息。如果问题是由于锁定引起,使用InnoDB_lock_monitor。如果问题是在建表时或其它的数据字典操作,使用InnoDB_table_monitor显示InnoDB内部数据字典的内容。如果你怀疑表已损坏,在表上运行CHECKTABLE。
15.1发现并修复数据字典错误的操作
一个特殊的有关表的问题就是MySQL在它自己的数据目录下的.frm文件中保存它自己的数据字典信息,然而InnoDB将它自己的信息保存在数据文件中InnoDB自己的数据字典中。如果你在外部移走了.frm文件,或在MySQL<3.23.44的版本中使用了DROPDATABASE,或在数据字典操作时服务器崩溃了,那么.frm文件可能会因与InnoDB内部的数据字典out-of-sync而结束。
与数据字典out-of-sync的一个故障现象就是CREATETABLE语句的调用失败。那么你必须查看错误日志。如果错误述说为表在InnoDB内部数据字典中已存在,那么一定在InnoDB的数据文件中存在一个孤表(orphanedtable),没有相对应的.frm文件。
InnoDB:Error:tabletest/parentalreadyexistsinInnoDBinternalInnoDB:datadictionary.Haveyoudeletedthe.frmfileInnoDB:andnotusedDROPTABLE?HaveyouusedDROPDATABASEInnoDB:forInnoDBtablesinMySQLversion<=3.23.43?InnoDB:SeetheRestrictionssectionoftheInnoDBmanual.InnoDB:YoucandroptheorphanedtableinsideInnoDBbyInnoDB:creatinganInnoDBtablewiththesamenameinanotherInnoDB:databaseandmovingthe.frmfiletothecurrentdatabase.InnoDB:ThenMySQLthinksthetableexists,andDROPTABLEwillInnoDB:succeed.
你可以跟从上面错误日志中的提示移除(drop)孤表(orphanedtable)。
另一个与数据字典out-of-sync的故障现象就是MySQL提示不能打开一个文件yourtablename.InnoDB的错误。
ERROR1016:Can'topenfile:'child2.InnoDB'.(errno:1)
在错误日志中可以发现:
InnoDB:Cannotfindtabletest/child2fromtheinternaldatadictionaryInnoDB:ofInnoDBthoughthe.frmfileforthetableexists.MaybeyouInnoDB:havedeletedandrecreatedInnoDBdatafilesbuthaveforgottenInnoDB:todeletethecorresponding.frmfilesofInnoDBtables?
意思就是有一个孤的(orphaned).frm文件,在InnoDB中没有相应的表与之对应。可以通过手工删除.frm文件来移除它。
如果在一个ALTERTABLE操作时MySQL崩溃了,你可能会因在InnoDB表空间在存在一个孤的临时表而告终。通过InnoDB_table_monitor,你可以发现一个名为#sql...的表,但是MySQL不允许访问任何一个如此命名的表,你将不能转储(dump)或移除(drop)它。解决办法就是使用从3.23.48开始InnoDB支持的一个特殊的机制。
如果在表空间内存在一个孤表(orphanedtable)#sql...,那么调用1
相关文章推荐
- InnoDB 中文参考手册 --- 15 故障检测与修复
- InnoDB 中文参考手册 --- 10 multiversioning 的实现
- InnoDB 中文参考手册 --- 13 出错处理
- InnoDB 中文参考手册 --- 4 建立 InnoDB 表
- InnoDB中文参考手册---11表和索引结构
- 中文参考手册---15为MySQL增加新过程
- InnoDB中文参考手册---4建立InnoDB表
- InnoDB 中文参考手册 --- 9 性能调整技巧
- InnoDB 中文参考手册 --- 12 文件空间管理和磁盘 I/O
- InnoDB 中文参考手册 --- 译者序
- InnoDB中文参考手册---12文件空间管理和磁盘I/O
- InnoDB中文参考手册---5添加与移除InnoDB数据和日志文件
- InnoDB 中文参考手册 --- 8 InnoDB 事务模式与锁定
- InnoDB 中文参考手册 --- 11 表和索引结构
- InnoDB中文参考手册---13出错处理
- InnoDB中文参考手册---9性能调整技巧
- InnoDB 中文参考手册 --- 4 建立 InnoDB 表
- InnoDB 中文参考手册 by shuixin13
- InnoDB 中文参考手册 --- 7 将 InnoDB 数据库移动到另一台机器中
- InnoDB 中文参考手册 --- 3 建立一个 InnoDB 数据库