快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

希尔顿国际游戏官网:一个mysql表索引被破坏的问题及解决



下昼上班,惊闻我的dedecms的网站出问题了,造访一看,公然全屏报错,反省mysql日志,差错信息为:

Table '.\dedecmsv4\dede_archives' is marked as crashed and should be repaired

提示说cms的文章表dede_archives被标记有问题,必要修复。于是从速规复历史数据,上网查找缘故原由。终极将问题办理。办理措施如下:

找到mysql的安装目录的bin/m希尔顿国际游戏官网yisamchk对象,在敕令行中输入:

myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI

然后myisamchk 对象会赞助你规复数据表的索引。从新启动mysql,问题办理。

问题阐发:

1、差错孕育发生缘故原由,有网友说是频繁查询和更新dede_archives表造成希尔顿国际游戏官网的索引差错,由于我的页面没有静态天生,而是动态页面,是以对照批准这种说法。还有说法为是MYSQL数据库由于某种缘故原由而受到了毁坏,如:数据库办事器突发性的断电、在提在数据库表供给办事时对表的原文件进行某种操作都有可能导致MYSQL数据库表被毁坏而无法读取数据。总之便是由于某些弗成测的问题造成表的毁坏。

问题的编号为145

2、问题办理法子。

当你试图修复一个被破坏的表的问题时,有三种修复类型。假如你获得一个差错信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这平日是上一次修复操作遗留下来的。

这三种修复措施如下所示:

% myisamchk --recover --quick /path/to/tblName

% myisamchk --recover /path/to/tblName

% myisamchk --safe-recover /path/to/tblName

第一种是最快的,用来修复最通俗的问题;而着末一种是最慢的,用来修复一些其它措施所不能修复的问题。

反省和修复MySQL数据文件

假如上面的措施无法修复一个被毁坏的表,在你放弃之前,你还可以试试下面这两个技术:

假如你狐疑表的索引文件(*.MYI)发生了弗成修复的差错,以致是损掉了这个文件,你可以应用数据文件(*.MYD)和数据款式文件(*.frm)从新天生它。首先制作一个数据文件(tblName.MYD)的拷贝。重启你的MySQL办事并连接到这个办事上,应用下面的敕令删除表的内容:

mysql> DELETE FROM tblName;

在删除表的内容的同时,会建立一个新的索引文件。退出登录并从新关闭办事,然后用你刚才保存的数据文件(tblName.MYD)覆盖新的(空)数据文件。着末,应用myisamchk履行标准的修复(上面的第二种措施),根据表的数据的内容和表的款式文件从新天生索引数据。

假如你的表的款式文件(tblName.frm)损掉了或者是发生了弗成修复的差错,然则你清楚若何应用响应的CREATE TABLE语句来从新天生这张表,你可以从新天生一个新的.frm文件并和你的数据文件和索引文件(假如索引文件有问题,应用上面的措施重修一个新的)一路应用。首先制作一个数据和索引文件的拷贝,然后删除原本的文件(删除数据目录下有关这个表的所有记录)。

启动MySQL办事并应用当初的CREATE TABLE文件建立一个新的表。新的.frm文件应该可以正常事情了,然则最好你照样履行一下标准的修复(上面的第二种措施)。

3、myisamchk对象先容(见mysql的官方手册)

可以应用myisamchk实用法度榜样来得到有关数据库表的信息或反省、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。

调用myisamchk的措施:

shell> myisamchk [options] tbl_name ...

options指定你想让myisamchk做什么。在后面描述它们。还可以经由过程调用myisamchk --help获得选项列表。

tbl_name是你想要反省或修复的数据库表。假如你不在数据库目录的某处运行myisamchk,你必须指定命据库目录的路径,由于myisamchk不知道你的数据库位于哪儿。实际上,myisamchk不在乎你正在操作的文件是否位于一个数据库目录;你可以将对应于数据库表的文件拷贝到别处并且在那里履行规复操作。

假如你乐意,可以用myisamchk敕令行命名几个表。还可以经由过程命名索引文件(用“ .MYI”后缀)来指定一个表。它容许你经由过程应用模式“*.MYI”指定在一个目录所有的表。例如,假如你在数据库目录,可以这样在目录下反省所有的MyISAM表:

shell> myisamchk *.MYI

假如你不在数据库目录下,可经由过程指定到目录的路径反省所希尔顿国际游戏官网有在那里的表:

shell> myisamchk /path/to/database_dir/*.MYI

你以致可以经由过程为MySQL数据目录的路径指定一个通配符来反省所有的数据库中的所有表:

shell> myisamchk /path/to/datadir/*/*.MYI

保举的快速反省所有MyISAM表的要领是:

shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI

假如你想要反省所有MyISAM表并修复任何破坏的表,可以应用下面的敕令:

shell> myisamchk --silent --force --fast --update-stat希尔顿国际游戏官网e \

-O key_buffer=64M -O sort_buffer=64M \

-O read_buffer=1M -O write_buffer=1M \

/path/to/datadir/*/*.MYI

该敕令假定你有大年夜于64MB的自由内存。关于用myisamchk分配内存的具体信息,拜见5.9.5.5节,“myisamchk内存应用”。

当你运行myisamchk时,必须确保其它法度榜样不应用表。否则,当你运行myisamchk时,会显示下面的差错消息:

warning: clients are using or haven't closed the table properly

这阐明你正考试测验反省正被另一个还没有关闭文件或已经终止而没有精确地关闭文件的法度榜样(例如mysqld办事器)更新的表。

假如mysqld正在运行,你必须经由过程FLUSH TABLES强制清空仍旧在内存中的任何表改动。当你运行myisamchk时,必须确保其希尔顿国际游戏官网它法度榜样不应用表。避免该问题的最轻易的措施是应用CHECK TABLE而不用myisamchk来反省表。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: