首页数据库mysql数据库修复(如何修复MySQL数据库表)

mysql数据库修复(如何修复MySQL数据库表)

编程之家2023-10-21106次浏览

大家好,感谢邀请,今天来为大家分享一下mysql数据库修复的问题,以及和如何修复MySQL数据库表的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

mysql数据库修复(如何修复MySQL数据库表)

mysql数据文件破坏后的修复方法

由于临时断电使用kill中止MySQL服务进程所有的这些都可能会毁坏MySQL的数据文件如果在***扰时服务正在改变文件文件可能会留下错误的或不一致的状态因为这样的毁坏有时是不容易被发现的当你发现这个错误时可能是很久以后的事了于是当你发现这个问题时也许所有的备份都有同样的错误

MySQL参考手册的第十五章讲述了MySQL自带的myisamc的功能以及如何使用它检查和修复你的MySQL数据文件虽然这一章对于每个想要搭建一个强壮的MySQL服务的人都是推荐阅读的我们还是有必要在这里对其中的要点进行讨论

在我们继续之前你必须意识到myisamc程序对用来检查和修改的MySQL数据文件的访问应该是唯一的如果MySQL服务正在使用某一文件并对myisamc正在检查的文件进行修改 myisamc会误以为发生了错误并会试图进行修复这将导致MySQL服务的崩溃!这样要避免这种情况的发生通常我们需要在工作时关闭MySQL服务作为选择你也可以暂时关闭服务以制作一个文件的拷贝然后在这个拷贝上工作当你做完了以后重新关闭服务并使用新的文件取代原来的文件(也许你还需要使用期间的变更日志)

MySQL数据目录不是太难理解的每一个数据库对应一个子目录每个子目录中包含了对应于这个数据库中的数据表的文件每一个数据表对应三个文件它们和表名相同但是具有不同的扩展名 tblName frm文件是表的定义它保存了表中包含的数据列的内容和类型 tblName MYD文件包含了表中的数据 tblName MYI文件包含了表的索引(例如它可能包含lookup表以帮助提高对表的主键列的查询)

要检查一个表的错误只需要运行myisamc(在MySQL的bin目录下)并提供文件的位置和表名或者是表的索引文件名

mysql数据库修复(如何修复MySQL数据库表)

myisamc/usr/local/mysql/var/dbName/tblName myisamc/usr/local/mysql/var/dbName/tblName MYI

上面的两个命令都可以执行对指定表的检查要检查数据库中所有的表可以使用通配符

myisamc/usr/local/mysql/var/dbName/* MYI

要检查所有数据库中的所有表可以使用两个通配符 myisamc/usr/local/mysql/var/*/* MYI

如果不带任何选项 myisamc将对表文件执行普通的检查如果你对一个表有怀疑但是普通的检查不能发现任何错误你可以执行更彻底的检查(但是也更慢!)这需要使用 extend check选项

myisamc extend check/path/to/tblName

mysql数据库修复(如何修复MySQL数据库表)

对错误的检查是没有破坏性的这意味着你不必担心执行对你的数据文件的检查会使已经存在的问题变得更糟另一方面修复选项虽然通常也是安全的但是它对你的数据文件的更改是无法撤消的因为这个原因我们强烈推荐你试图修复一个被破坏的表文件时首先做个备份并确保在制作这个备份之前你的MySQL服务是关闭的

当你试图修复一个被破坏的表的问题时有三种修复类型如果你得到一个错误信息指出一个临时文件不能建立删除信息所指出的文件并再试一次这通常是上一次修复操作遗留下来的这三种修复方法如下所示

myisamc recover quick/path/to/tblName myisamc recover/path/to/tblName myisamc safe recover/path/to/tblName

第一种是最快的用来修复最普通的问题而最后一种是最慢的用来修复一些其它方法所不能修复的问题

检查和修复MySQL数据文件如果上面的方法无法修复一个被损坏的表在你放弃之前你还可以试试下面这两个技巧

如果你怀疑表的索引文件(* MYI)发生了不可修复的错误甚至是丢失了这个文件你可以使用数据文件(* MYD)和数据格式文件(* frm)重新生成它首先制作一个数据文件(tblName MYD)的拷贝重启你的MySQL服务并连接到这个服务上使用下面的命令删除表的内容

mysql DELETE FROM tblName;

在删除表的内容的同时会建立一个新的索引文件退出登录并重新关闭服务然后用你刚才保存的数据文件(tblName MYD)覆盖新的(空)数据文件最后使用myisamc执行标准的修复(上面的第二种方法)根据表的数据的内容和表的格式文件重新生成索引数据

如果你的表的格式文件(tblName frm)丢失了或者是发生了不可修复的错误但是你清楚如何使用相应的CREATE TABLE语句来重新生成这张表你可以重新生成一个新的 frm文件并和你的数据文件和索引文件(如果索引文件有问题使用上面的方法重建一个新的)一起使用首先制作一个数据和索引文件的拷贝然后删除原来的文件(删除数据目录下有关这个表的所有记录)

启动MySQL服务并使用当初的CREATE TABLE文件建立一个新的表新的 frm文件应该可以正常工作了但是最好你还是执行一下标准的修复(上面的第二种方法)

可以使用mysql语句用 CHECK TABLE$table;//其中$table代表数据表的名字检测表是否损坏如果损坏可以REPAIR TABLE$table来修复如果一次不行可以多修复几次!

如果使用WIN服务器可以先登陆DB服务器进入此路径不用进mysql里

D:\CD MYSQL

D:\mysql>CD BIN

D:\mysql\bin>MYISAMCHK r d:\mysql\data\guild\msg_table myi(msg_table) check key delete chain check record delete chain recovering(with sort) MyISAM table d:\mysql\data\guild\msg_table myi Data records: Fixing index

D:\mysql\bin>MYISAMCHK safe recover d:\mysql\data\guild\msg_table myi recovering(with keycache) MyISAM table d:\mysql\data\guild\msg_table myi Data records:

D:\mysql\bin>

当不知道哪个表坏了可以进入mysql数据库: use guild; desc msg_table;看msg_table有没有坏

lishixinzhi/Article/program/MySQL/201311/29485

如何修复MySQL数据库表

有两种方法,一种方法使用mysql的check table和repair table的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。

1. check table和 repair table

登陆mysql终端:

mysql-uxxxxx-p dbname

check table tabTest;

如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:

repair table tabTest;

进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

2. myisamchk, isamchk

其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:

myisamchk tablename.MYI

进行检测,如果需要修复的话,可以使用:

myisamchk-of tablename.MYI

关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。

另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:

[-x/tmp/mysql.sock ]&&/pathtochk/myisamchk-of/DATA_DIR/*/*.MYI

其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。

需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)

navicat for mysql中如何设置自动修复崩溃的数据表

jb51_tablename是jb51_tablename.MYD的名称。运行以下就可以了。

有的时候因为掉电或者其他原因导致数据库损坏,我们可以使用mysql自带的mysqlcheck命令来快速修复所有的数据库或者特定的数据库;例如

检查优化并修复所有的数据库用:

1.先在运行中输入CMD,启动命令行.

2.进入Mysql的Bin目录:E:\Program Files\MySQL\MySQL Server 5.0\bin,如果不知道如何进入别的目录,就要参考网上的资料补习基础知识了.

常见方式:

如何修复MySQL数据库

简单情况下:进入原来mysql安装路径下的data文件夹下,找到相应的库和ibdata1,进行copy,就可回复原来的数据。

复杂情况下:

从另一台机上把MySQL数据库的mysql文件夹拷贝到本地机上,目的是恢复本地机对数据的访问和操作。经过如下几种情况的操作。

1.在本地重装MySQL(安装目录D:\Program Files\MySQL\MySQL Server 5.0),直接把mysql文件夹拷贝至D:\Program Files\MySQL\MySQL Server 5.0\。结果,失败:数据库连接错误。

2.卸载后重装MySQL,将D:\Program Files\MySQL\MySQL Server 5.0\下的数据备份,只把mysql\data文件夹全部内容拷贝到D:\Program Files\MySQL\MySQL Server 5.0\data下。结果,失败:数据库连接错误。将备份的数据还完覆盖。结果,失败,还是连接不上数据库。

3.卸载后重装MySQL,将mysql\data文件夹里的cf1,last文件夹(这两个是原来MySQL里的数据库)拷贝进D:\Program Files\MySQL\MySQL Server 5.0\data。连接成功,在Navicat for MySQL里看到数据库cf1和last,但是不能访问,因为数据全为零。明白了原来data里以数据库命名的文件存储的是数据库的表结构,不是元数据。下一步,把data文件夹里的ibdata1文件(3.4G大,明显存储了元数据)拷贝到D:\Program Files\MySQL\MySQL Server 5.0\data里,代替原来的ibdata1文件。重启电脑,打开Navicat for MySQL,连接成功,数据可以访问操作。

至此,操作终于成功。其实当初在那台机上把数据导出来,而不是现在直接把文件夹mysql复制过来会更容易恢复。但那台机已经重装了系统,也就是说MySQL失效了。

关于本次mysql数据库修复和如何修复MySQL数据库表的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

智慧芽数据库,智慧芽专利数据库中默认可以检索多少种类型的专利服务器能干嘛 云服务器可以用来做什么