myisamchk命令修复表操作

myisamchk命令使用总结

myisamchk实用程序可以用来获得有关你的数据库表的统计信息或检查、修复、优化他们

1.常用于myisamchk的检查选项
--information, -i
打印所检查表的统计信息。

--fast,-F
只检查没有正确关闭的表。

--force, -f
如果myisamchk发现表内有任何错误,则自动进行修复。维护类型与-r选项指定的相同。

--medium-check, -m
比--extend-check更快速地进行检查。只能发现99.99%的错误,在大多数情况下就足够了。

长用命令如下:
快速的检查
[[email protected] ~]# myisamchk -im /var/lib/mysql/backup/t1

只检查没有正常关闭的表
[[email protected] ~]# myisamchk -iFm /var/lib/mysql/backup/*

仅显示表的最重要的信息
[[email protected] backup]# myisamchk  -eis /var/lib/mysql/backup/t1

2.长用于myisamchk的修复选项
--backup, -B
将.MYD文件备份为file_name-time.BAK

--correct-checksum
纠正表的校验和信息。

--force, -f
覆盖旧的中间文件(文件名类似tbl_name.TMD),而不是中断。

--quick,-q
不修改数据文件,快速进行修复。出现复制键时,你可以两次指定该项以强制myisamchk修改原数据文件。

--recover, -r
可以修复几乎所有一切问题,除非唯一的键不唯一时(对于MyISAM表,这是非常不可能的情况)。如果你想要恢复表,这是首先要尝试的选项。如果myisamchk报告表不能用-r恢复,则只能尝试-o。如果你有大量内存,你应增加sort_buffer_size的值。

--safe-recover, -o
使用一个老的恢复方法读取,按顺序读取所有行,并根据找到的行更新所有索引树。这比-r慢些,但是能处理-r不能处理的情况。该恢复方法使用的硬盘空间比-r少。一般情况,你应首先用-r维修,如果-r失败则用-o。如果你有大量内存,你应增加sort_buffer_size的值。

--tmpdir=path, -t path
用于保存临时文件的目录的路径。如果未设置,myisamchk使用TMPDIR环境变量的值。tmpdir可以设置为一系列目录路径,用于成功地以round-robin模式创建临时文件。在Unix中,目录名之间的间隔字符为冒号(‘:’),在Windows、NetWare和OS/2中为分号 (‘;’)。

--unpack,-u
将用myisampack打包的表解包。

常用恢复命令:
首先尝试用这种恢复方式
[[email protected] ~]# myisamchk -iBfqr /var/lib/mysql/backup/t1
如果上面的恢复失败,再尝试用如下的方式,这个比较慢
[[email protected] ~]# myisamchk -iBfqo /var/lib/mysql/backup/t1

3.长用于myisamchk的分析选项
 --analyze,-a
分析键值的分布。这通过让联结优化器更好地选择表应该以什么次序联结和应该使用哪个键来改进联结性能。要想获取分布相关信息,使用如下两个命令
mysql> show keys from t1;

[[email protected] ~]# myisamchk --description --verbose  /var/lib/mysql/backup/t1

--description, -d
打印出关于表的描述性信息

--sort-index, -S
以从高到低的顺序排序索引树块。这将优化搜寻并且将使按键值的表扫描更快。

--sort-records=N, -R N
根据一个具体索引排序记录。这使你的数据更局部化并且可以加快在该键上的SELECT和ORDER BY的范围搜索。(第一次做排序可能很慢!)为了找出一张表的索引编号,使用SHOW INDEX,它以myisamchk看见他们的相同顺序,显示一张表的索引。索引从1开始编号。

如果键没有打包(PACK_KEYS=0),它们的长度相同,因此当myisamchk 排序并移动记录时,只覆盖索引中的记录偏移量。如果
键已经打包(PACK_KEYS=1),myisamchk必须先解开打包的键块,然后重新创建索引并再次将键块打包。(在这种情况下,重新创建索引比更新每个索引的偏移量要快)。

4.myisamchk内存使用

myisamchk默认只用3M的内存来修复,如果要修复大表的话,显然速度会巨慢,我们可以通过为myisamchk设置更多的内存,来使其运行的更快,

[[email protected] ~]# myisamchk --sort_buffer_size=16M --key_buffer_size=16M --read_buffer_size=1M --write_buffer_size=1M

一般sort_buffer_size的大小16m就足够用了。

myisamchk默认使用选项“--tmpdir”作为临时文件的,如果tmpdir指定内存的话,恢复的表比较大,很容易报内存的错误,所以我们可以用tmpdir指定一个比较大的文件系统

[[email protected] ~]# myisamchk --sort_buffer_size=16m --key_buffer_size=16m  --read_buffer_size=2m --write_buffer_size=1m --tmpdir=/tmp -iBfqr /var/lib/mysql/backup/t1

5.myisamchk用于崩溃恢复

在使用myisamdchk修复会优化表时,必须保证mysqld服务器没有使用该表,最好关闭mysqld服务;如果不关闭mysqld,在运行myisamchk之前应执行mysqladmin flash-tables。如果服务器和myisamchk同时访问表,表可能会被破坏。

使用“--skip-external-locking”一般是系统的默认启用选项,mysql数据库一般也是应禁用该选项,因为使用系统的lock和mysql很容易产生死锁。

执行myisam表的恢复只要是修复表的三个文件,最常发生问题的文件是数据文件和索引文件
tbl_name.frm:定义(格式)文件
tbl_name.MYD:数据文件
tbl_name.MYI:索引文件

恢复步骤
A.检查myisam表的错误
# myisamchk -im --verbose  /var/lib/mysql/backup/t1

如果有错误,用perror命令查看错误码
[[email protected] ~]# perror 126
OS error code 126:  Required key not available

B.初级修复myisam表
试图不接触数据文件来修复索引文件,
# myisamchk -rq  tablename

如果恢复失败,继续如下
#[[email protected] ~]# myisamchk -Br tablename

还不行就执行如下
#[[email protected] ~]# myisamchk -o tablename

C.中级修复myisam表
只有在索引文件的第一个16K块被破坏,或包含不正确的信息,或如果索引文件丢失,你才应该到这个阶段

1).把数据文件移到安全的地方。
2).使用表描述文件创建新的(空)数据文件和索引文件:
3).shell> mysql db_name
4).mysql> SET AUTOCOMMIT=1;
5).mysql> TRUNCATE TABLE tbl_name;
6).mysql> quit
  如果没有TRUNCATE TABLE,则使用DELETE FROM tbl_name。
7).将老的数据文件拷贝到新创建的数据文件之中。 (记得保留一个副本以防某些东西出错) 
8).在实行myisamchk -rq tablename应该就可以了
  或
  mysql> REPAIR TABLE tbl_name USE_FRM

D.高级恢复
1).从一个备份恢复描述文件然后执行“myisamchk -r tablename”
2).如果没有备份而知道表是怎样创建的,在另一个数据库中创建表的一个拷贝。删除新的数据文件,然后从其他数据库将描述文件和索引文件移到破坏的数据库中。这样在破坏的库里就有新的描述和索引文件,但是让.MYD数据文件独自留下来了。然后在执行“myisamchk -r tablename”

6.myisamchk对表优化

为了组合碎片记录并且消除由于删除或更新记录而浪费的空间
shell> myisamchk -r tbl_name

对所有的索引进行排序以便更快地查找键值
myisamch -S tablename

对指定的索引进行排序以便更快地查找键值
mysql> show index from tablename;
# myisamch -R 1 tablename

如果你用动态大小的行更改MyISAM表(含VARCHAR、BLOB或TEXT列的表)或有删除了许多行的表,你可能想要不时地(每月一次)整理/组合表的空间

可以对有问题的表执行OPTIMIZE TABLE来优化。或者是,如果可以停一会mysqld服务器,执行如下命令:
#  myisamchk -r -s --sort-index -O sort_buffer_size=16M */*.MYI

原文地址:https://www.cnblogs.com/xzlive/p/9257598.html

时间: 2024-10-10 12:30:22

myisamchk命令修复表操作的相关文章

使用myisamchK 命令修复数据

使用myisamchk 命令修复表 myisam使用程序可以用来获得有关你的数据库表的统计信息,检查,修复,优化他们 命令格式: myisamchk  [option] tables [.frm] 常用的检查选项: --information -i 打印所检察标的统计信息 --fast ,-F  只检查没有正确关闭的表 --force ,-f 如果myisam发现表内有任何错误,则自动修复维护类型与-r指定相同 --medium-check,-m比--extend-check更快速的进行检查,只

mysql命令修复数据库表开心乐园源码

REPAIR TABLE `table_name` 修复表  (只对oa开心乐园源码搭建q3191355031有效)OPTIMIZE TABLE `table_name` 优化表 REPAIR TABLE 用于修复被破坏的表.OPTIMIZE TABLE 用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,使用了OPTIMIZE TABLE命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库). 多数时间并不需要运行OPTIMIZE T

mysql下优化表和修复表命令(repair table、optimize table)

随着mysql的长期使用,肯定会出现一些问题,一般情况下mysql表无法访问,就可以修复表了,优化时减少磁盘占用空间,方便备份. repair table table_name //修复表 optimize table table_name //优化表 repair table用于修复被破坏的表. optimize table用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,使用了optimize table命令后这些空间将被回收,并且对磁盘上的数据行进行重排(

mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)

随着mysql的长期使用,可以修复表来优化,优化时减少磁盘占用空间.方便备份. REPAIR TABLE `table_name` 修复表 OPTIMIZE TABLE `table_name` 优化表 REPAIR TABLE 用于修复被破坏的表. OPTIMIZE TABLE 用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,使用了OPTIMIZE TABLE命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库). 多数时间并不需

Hive命令行常用操作(数据库操作,表操作)

数据库操作 查看所有的数据库 hive> show databases ; 使用数据库default hive> use default; 查看数据库信息 hive > describe database default; OK db_name comment location owner_name owner_type parameters default Default Hive database hdfs://hadoop1:8020/user/hive/warehouse pub

myisamchk命令使用总结

原文自:http://blog.csdn.net/wyzxg/article/details/7303486 论述详细,情不自禁 复制粘贴,以防删除 myisamchk命令使用总结 myisamchk实用程序可以用来获得有关你的数据库表的统计信息或检查.修复.优化他们 1.常用于myisamchk的检查选项--information, -i打印所检查表的统计信息. --fast,-F只检查没有正确关闭的表. --force, -f如果myisamchk发现表内有任何错误,则自动进行修复.维护类型

如何解决Greenplum中无法通过标准命令修复的元数据错误

Greenplum的可靠性还是没法和传统商业数据库相比,它跑着跑着就会把自己的元数据给跑乱,有些是可以通过命令修复的,有些则只能直接去增删改system catalog.本文结合一个具体错误,介绍如何操作system catalog解决元数据错误. 现象 使用gpcheckcat -p 5432 databasename检查数据库时,将报出类似如下的输出: Relation oid: 12345678 Relation name: None.None Name of test which fou

mysql修复表的三个方法

断电或非正常关机可能导致MySQL数据库出现表损坏,特别是MyISAM表数据很大的时候.有三种方法,一种方法使用MySQL的repair table的sql语句,另一种方法是使用MySQL提供的myisamchk,,最后一种是mysqlcheck命令行工具. 1.repair table(建议方法,对MyISAM引擎表有用)(1)check table tabTest;如果出现的结果说Status是OK,则不用修复,如果有Error,可以用: (2)repair table tabTest;进行

mysql基本认识【关系型数据库和nosql、mysql操作流程和体系,库操作,表操作,数据的操作,字符集的操作,以及php作为client操作数据库】对连接本身没有疑问

1.关系型数据库永久性保存数据的仓库php的变量只是php脚本执行期间,临时性保存变量的空间[使用内存空间临时保存] 关系型数据库:利用二者的关系来描述实体的信息.[利用二维表字段名和字段值来进行描述][关系型数据库根本不是可以使用外键将两个表构建成关联的意思,而是实现描述实体的二维表的形式] nosql:not only sql[sql表示操作关系型数据的语言]所以nosql指的就是非关系型数据库[典型的是键值对型的数据(redis.memcache)][nosql可以视情况添加信息,不需要对