知识大全 mysql数据文件破坏后的修复方法

Posted 文件

篇首语:人不在大小,马不在高低。人往高处走,水往低处流。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 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目录下)并提供文件的位置和表名 或者是表的索引文件名

  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服务是关闭的

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

  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有没有坏

cha138/Article/program/MySQL/201311/29485

相关参考

知识大全 MySql通过二进制日志文件恢复数据

MySql通过二进制日志文件恢复数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Mysql配

知识大全 Mysql数据库对文件操作的封装

Mysql数据库对文件操作的封装  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinzh

知识大全 通过幸存oracle文件修复oracle9i数据

  问我没有备分oralce也没有导出数据库现在操作系统崩溃了但是oracle目录下的文件很完整请问如何修复我的表?  答:建一个相同的数据库(磁盘目录相同否则要改init文件麻烦)把数据文件控制文件

知识大全 win7系统被破坏了怎么修复

win7系统被破坏了怎么修复在cmd或者powershell下运行sfc/scannow扫描所有保护的系统文件的完整性,并尽可能修复有问题的文件,如果无法系统修复存在的问题可以重装系统Win7系统破坏

知识大全 如何恢复和修复MS SQL数据库的MDF文件[2]

如何恢复和修复MSSQL数据库的MDF文件[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 如何恢复和修复MS SQL数据库的MDF文件[1]

如何恢复和修复MSSQL数据库的MDF文件[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 打开Oracle某数据文件损坏后的数据库

打开Oracle某数据文件损坏后的数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  系统环境

知识大全 php 批量生成html,txt文件的实现代码

  首先建立一个connphp的文件用来链接数据库复制代码代码如下:<?php$link=mysql_connect("mysql_host""mysql_user""mysql_passwor

知识大全 linux系统下mysql中文乱码解决

  改默认编码  /etc/initd/mysqlstart(stop)为启动和停止服务器  /etc/mysql/主要配置文件所在位置f  /var/lib/mysql/放置的是数据库表文件夹这里的

知识大全 MySQL 5.0.91最终版发布 修复高危漏洞

MySQL5.0.91最终版发布修复高危漏洞  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs