千家信息网

使用myisamchk和mysqlcheck工具如何修复损坏的MySQL数据库文件

发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章将为大家详细讲解有关使用myisamchk和mysqlcheck工具如何修复损坏的MySQL数据库文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。由于服务
千家信息网最后更新 2025年11月11日使用myisamchk和mysqlcheck工具如何修复损坏的MySQL数据库文件

这篇文章将为大家详细讲解有关使用myisamchk和mysqlcheck工具如何修复损坏的MySQL数据库文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

由于服务器的数据库硬盘空间满了,由于大量写入数据失败导致了出现"Duplicate entry '' for key 'username'"的错误。

如果,出现这样的mysql数据库错误很可能是mysql数据库索引出了问题。那么,什么是mysql数据库索引?

分析:索引如果是primary unique这两两种,那么数据表的数据对应的这个字段就必须保证其每条记录的唯一性。否则就会产生这个错误。

一般发生在对数据库写操作的时候,例如Discuz!4.1论坛程序要求所有会员的用户名username必须唯一,即username 的索引是unique,这时如果强行往cdb_members表里插入一个已有的username的记录就会发上这个错误,或者将一条记录的username更新为已有的一个username。

比如某网友的dedecms网站出问题了,访问一看,果然全屏报错,检查mysql日志,错误信息为:

Table .dedecmsv4dede_archives is marked as crashed and should be repaired

提示说cms的文章表dede_archives被标记有问题,需要修复。

于是赶快恢复历史数据,上网查找原因。最终将问题解决。

解决方法如下:

找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:

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

然后myisamchk 工具会帮助你恢复数据表的索引。重新启动mysql,问题解决。

那么,修复mysql数据库一般可以myisamchk工具或者mysqlcheck工具用这二种方法:

1、myisamchk工具

使用 myisamchk 必须暂时停止 MySQL 服务器。例如,我们要检修 discuz 数据库。执行以下操作:

# service mysql stop (停止 MySQL );

# myisamchk -r /数据库文件的绝对路径/*MYI

# service mysql start

myisamchk 会自动检查并修复数据表中的索引错误。

2、mysqlcheck工具

使用 mysqlcheck 无需停止 MySQL ,可以进行热修复。操作步骤如下:

# mysqlcheck -r discuz.*

# service mysql stop (停止 MySQL );

# myisamchk -r /数据库文件的绝对路径/*MYI

# service mysql start

myisamchk 会自动检查并修复数据表中的索引错误。

注意:无论是 myisamchk 还是 mysqlcheck ,一般情况下不要使用 -f 强制修复,-f 参数会在遇到一般修复无法成功的时候删除部分出错数据以尝试修复。所以,不到万不得已不要使用 -f。

下面是其它网友的补充

检查修复所有数据库:

# mysqlcheck -A -o -r -p
Enter password:
db1 OK
db2 OK
db3 OK
db4 OK
......
......
......

修复指定的数据库用

# mysqlcheck -o -r Database_NAME -p

即可

命令详解:

mysqlcheck客户端可以检查和修复MyISAM表。它还可以优化和分析表。
mysqlcheck的功能类似myisamchk,但其工作不同。主要差别是当mysqld服务器在运行时必须使用mysqlcheck,而myisamchk应用于服务器没有运行时。使用mysqlcheck的好处是不需要停止服务器来检查或修复表。
Mysqlcheck为用户提供了一种方便的使用SQL语句CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABLE的方式。它确定在要执行的操作中使用使用哪个语句,然后将语句发送到要执行的服务器上。
有3种方式来调用mysqlcheck:

shell> mysqlcheck[options] db_name [tables]
shell> mysqlcheck[options] ---database DB1 [DB2 DB3...]
shell> mysqlcheck[options] --all--database

如果没有指定任何表或使用---database或--all--database选项,则检查整个数据库。
同其它客户端比较,mysqlcheck有一个特殊特性。重新命名二进制可以更改检查表的默认行为(--check)。如果你想要一个工具默认可以修复表的工具,只需要将mysqlcheck重新复制为mysqlrepair,或者使用一个符号链接mysqlrepair链接mysqlcheck。如果调用mysqlrepair,可按照命令修复表。

下面的名可用来更改mysqlcheck的默认行为:

mysqlrepair

默认选项为--repair

mysqlanalyze
默认选项为--analyze

mysqloptimize
默认选项为--optimize

mysqlcheck支持下面的选项:
· ---help,-?
显示帮助消息并退出。
· --all--database,-A
检查所有数据库中的所有表。与使用---database选项相同,在命令行中命名所有数据库。
· --all-in-1,-1
不是为每个表发出一个语句,而是为命名数据库中待处理的所有表的每个数据库执行一个语句。
· --analyze,-a
分析表。
· --auto-repair
如果某个被检查的表破坏了,自动修复它。检查完所有表后自动进行所有需要的修复。
· --character-sets-dir=path
字符集的安装目录。参见5.10.1节,"数据和排序用字符集"。
· --check,-c
检查表的错误。
· --check-only-changed,-C
只检查上次检查以来已经更改的或没有正确关闭的表。
· --compress
压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)。
· ---database,-B
处理数据库中命名的所有表。使用该选项,所有字名参量被看作数据库名,而不是表名。
· ---debug[=debug_options],-# [debug_options]
写调试日志。debug_options字符串通常为'd:t:o,file_name'。
· --default-character-set=charset
使用charsetas默认字符集。参见5.10.1节,"数据和排序用字符集"。
· --extended,-e
如果你正使用该选项来检查表,可以确保它们100%地一致,但需要很长的时间。
如果你正使用该选项来修复表,则运行扩展修复,不但执行的时间很长,而且还会产生大量的垃圾行!
· --fast,-F
只检查没有正确关闭的表。
· --force,-f
即使出现SQL错误也继续。
· --host=host_name,-h host_name
连接给定主机上的MySQL服务器。
· --medium-check,-m
执行比--extended操作更快的检查。只能发现99.99%的错误,在大多数情况下这已经足够了。
· --optimize,-o
优化表。
· --password[=password],-p[password]
当连接服务器时使用的密码。如果使用短选项形式(-p),选项和 密码之间不能有空格。如果在命令行中--password或-p选项后面没有 密码值,则提示输入一个密码。
· --port=port_num,-P port_num
用于连接的TCP/IP端口号。
· --protocol={TCP | SOCKET | PIPE | MEMORY}
使用的连接协议。
· --quick,-q
如果你正使用该选项在检查表,它防止扫描行以检查错误链接的检查。这是最快的检查方法。
如果你正使用该选项在修复表,它尝试只修复索引树。这是最快的修复方法。
· --repair,-r
执行可以修复大部分问题的修复,只是唯一值不唯一时不能修复。
· --silent,-s
沉默模式。只打印错误消息。
· --socket=path,-S path
用于连接的套接字文件。
· --tables
覆盖---database或-B选项。选项后面的所有参量被视为表名。
· --user=user_name,-u user_name
当连接服务器时使用的MySQL用户名。
· --verbose,-v
冗长模式。打印关于各阶段程序操作的信息。
· --version,-V
显示版本信息并退出。

关于"使用myisamchk和mysqlcheck工具如何修复损坏的MySQL数据库文件"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

数据 检查 数据库 错误 工具 服务器 服务 索引 问题 文件 命令 字符 语句 信息 字符集 密码 数据表 方法 客户 客户端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 仙侠道 服务器 软件开发企业用什么记账软件 济南网络安全评估 陕西网络安全评估咨询 命令行改数据库ip地址 网络安全警句的通知 空心字体软件开发 如何将一个笔记本改成服务器 南京创惠互联网科技怎么样 安全警告连接服务器出现问题 技术支持数据库需要会编程吗 南京学校软件开发 提现网络技术的部门 高铁上的数据库是什么 gxb格式数据库 有关计算机网络技术专业知识 数据库用来抽象表示现实世界 数据库实体完整性的效果 网络安全与数据保护协议 服务器如何自动安装 关于网络安全等级保护制度的知识 天大网络安全学院 7互联网科技创新白皮书 蛋白互作网络数据库 开展网络安全法律教育 还原网络设置不成功找不到服务器 数据库是否可以删除 忍者必须死服务器怎么这么卡 爱屋及乌网络技术有限公司 网络技术学院大逃杀上海
0