如何修复损坏数据库中的数据表

在使用MySQL过程中,各种意外会导致数据库表的损坏,而且这些数据往往是最新的数据,通常不可能在备份数据中找到。在使用阿里云数据库RDS产品中,RDS是如何修复损坏数据库中的数据表的呢?在传统数据库中,又是如何对其进行修复的呢?接下来,我们将做一个比较:

阿里云数据库RDS

阿里云提供的关系型数据库(Relational Database Service,简称 RDS)是一种稳定可靠、可弹性伸缩的在线数据库服务。基于飞天分布式系统和高性能存储,RDS 支持 MySQL、SQL Server、PostgreSQL 和 PPAS( Postgre Plus Advanced server,一种高度兼容 Oracle 的数据库)引擎,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案。

背景:

RDS(mysql)如果使用了myisam引擎,那就很容易会出现数据表损坏的情况,这时候执行查询可能会提示:

mysql error:1194:Table 'xxx' is marked as crashed and should be repaired

那么,我们可以通过下面2种方法来进行修复,修复的过程中可能会导致数据丢失,操作之前最后能做个临时实例进行备份。

1.通过mysql客户端登入到数据库中进行操作,登入到指定的库中,执行下面命令修复:

repair table wp_users;

其中 wp_users是需要修复的表名称

2.使用DMS登入上去,选中表—右键菜单 —表维护 — 修复表 — 常规 这一系列步骤来进行修复。

传统数据库:

背景:

由于断电或非正常关机而导致MySQL数据库出现错误是非常常见的问题。

那么,我们可以通过下面2种方法来进行修复,一种方法使用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掉。

综上,我们可以看出相对于传统数据库在修复数据表时较复杂,而在阿里云数据库RDS中修复数据表易操作易维护,可以有效地减轻用户的运维压力。


参考

RDS(mysql)如何修复损坏的数据表

时间: 2024-08-03 11:34:43

如何修复损坏数据库中的数据表的相关文章

如何用PHP的页面备份、恢复Mysql数据库中的数据表

mysql|备份|恢复|数据|数据库|页面 <?           //备份数据       $i   =   0;       $crlf="\r\n";       $dbname="xgtqr";       global     $dbconn;       $dbconn   =   mysql_connect("localhost","root","root");       $db  

MySQL数据库中拷贝数据表的方法

  在 MySQL 中拷贝表,将 old_table 表拷贝为 new_table 表. 1. 不拷贝表数据,只拷贝结构. CREATE TABLE new_table LIKE old_table 2. 通过 SELECT 查询来拷贝,new_table 表会丢失主键.索引等信息. 引用 CREATE TABLE new_table AS ( SELECT * FROM old_table ) 3. 完全拷贝表 CREATE TABLE new_table LIKE old_table; IN

MySQL数据库中部分数据损坏恢复过程

前几天因为MySQL数据库部分数据损坏原因,我尝试了下恢复数据,之后整理以下文档,供各位参考,以备各位同事以后如有类似问题,可以少走些弯路,尽快解决问题. 环境:Windows2003 数据库:MySQL 损坏数据文件名:function_products 将数据库内容物理文件直接导入到mysql\data下,每只表各3个文件,依次分别为:.frm .myd .myi.首先我第一想到的是去网上搜索,寻找类似的工具,试图通过工具来恢复已损坏的文件,于是我在google上查找,找到一款名为mysql

求助,数据库中读取数据生成张表

问题描述 小弟刚刚实习一个月,最近遇到个问题一直没有进展问题描述,从Mysql数据库中读取一个表,生成一个Excel表格,但是表格和表的结构不一样我怎么样写一个Servlet,来实现这个功能呢?我想知道的是生成这个表格,并把数据传入进去的步骤如果能有一种上传一个干净没有数据的Excel表格做模版向其中添加数据也是再好不过啦.拜托各位大神指点迷津了,您的一句指点将使我少走许多弯路,谢谢啦 解决方案 解决方案二:poi或者jxl都可以实现读数据库获取数据想必应该难不倒你最主要的是使用poi或者jxl

asp.net用gridview显示数据库中两个表的数据?

问题描述 asp.net用gridview显示数据库中两个表的数据? asp.net用gridview显示数据库中两个表的数据?把两表绑定在datatable并用gridview显示数据 解决方案 两个表什么关系?如果是一样的表结构,用union连接,如果是主系表关系,那么可以用join.具体按照我说的google下. 解决方案二: 不管是查询几个表,最后通过sql语句走ado.net,查询出来的数据都放入DataTable或DataSet中,然后绑定到gridview 解决方案三: 如果是一起

mysql-php从数据库中读取某个表中的数据并在页面中一条条列出来,代码如下,数据库里有信息,显示不出来

问题描述 php从数据库中读取某个表中的数据并在页面中一条条列出来,代码如下,数据库里有信息,显示不出来 <?php include(""connectDB.php""); @$query=mysql_query($conSELECT * from xx""); @$result=mysql_fetch_array(@$query); if($result==true){ ?> <table width=""

jsp-从数据库中取出数据对应的集合,在JSP页面中遍历出一个表格,数据库中的字段对应的是表格表头名

问题描述 从数据库中取出数据对应的集合,在JSP页面中遍历出一个表格,数据库中的字段对应的是表格表头名 从数据库中取出数据对应的集合,在JSP页面中遍历出一个注册项的列表,每一项都是从数据库中的表中取出的,比如,第一行为用户名,后面是个文本框,第二行是密码,后面还是个文本框,但是有的type是text,有的是password,上传文件对应的是file,如何才能动态解决这个问题,在页面中用foreach,只写一列数据,在页面中得到所有的注册项,这种方法如果不可行,那么请问各位大神,应该如何处理比较

vs2010-用VS2010打开sdf数据库文件中的数据表时提示找不到指定模块

问题描述 用VS2010打开sdf数据库文件中的数据表时提示找不到指定模块 解决方案 VS没有安装正确,重新安装下看看

一致性-在数据库中已有表数据的外键的建立问题

问题描述 在数据库中已有表数据的外键的建立问题 我的数据库中的表都有上万条的数据,考虑到表之间的数据一致性,需要用到外键,但是现在对表进行外键创建的时候报错了:"消息 547,级别 16,状态 0,第 2 行 ALTER TABLE 语句与 FOREIGN KEY 约束"FK_TM_ProT"冲突.该冲突发生于数据库"Master",表"dbo.TProD", column 'ID'." 这个ID列示该表的主键+唯一建,现在想