mysql 修复_mysql数据库修复

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

接到监控系统进行报警,发现数据库服务器死机,立刻重启服务器,由于myqsql没有正常关闭,导致在宕机是对数据库中有操作的表损坏,需要进行修复数据表。

1、通过xshell的ssh协议登录mysql服务器。

#ssh [email protected] //回车,输入密码。

2、登录mysql

#mysql -p //回车,输入密码。

3、进入数据库,检测表是否损坏,并修复数据表。

#use 数据库名字。

#check table 表名 。//检测表数据是否损坏。

#repair table 表名。//修复表数据。

举个例子,如何判断表叔家是否损坏。

数据表损坏

+—————————+——-+———-+————————————————————-+

| Table                                          | Op    | Msg_type | Msg_text                                                    |

+—————————+——-+———-+————————————————————-+

|test.123                                    | check | warning  | Table is marked as crashed                                  |

|test.123                                    | check | warning  | 2 clients are using or haven’t closed the table properly    |

|test.123                                    | check | warning  | Size of datafile is: 3424854016       Should be: 3424853036 |

|test.123                                    | check | error       | Record at pos: 3382461400 is not remove-marked              |

|test.123                                    | check | error       | record delete-link-chain corrupted                          |

|test.123                                    | check | error       | Corrupt

数据表未损坏

+——————–+——-+———-+———-+

| Table                            | Op     | Msg_type | Msg_text |

+——————–+——-+———-+———-+

|test.123          | check | status          | OK       |

+——————–+——-+———-+———-+

如果数据库较多,表较多,这样修复是非常耗时的,所以采用如下方法:

1、通过xshell的ssh协议登录mysql服务器。

#ssh [email protected] //回车,输入密码。

2、检测数据库各个表的状态。

# mysqlcheck -a -o 数据库名字 -p //回车输入密码,然后回车。

如果有如下错误,进行表修复

Test.123

error    : Found key at page 821865472 that points to record outside datafile

status   : Operation failed

3、登录mysql

#mysql -p //回车,输入密码。

4、进入数据库,检测表是否损坏,并修复数据表。

#use 数据库名字。

#check table 表名 。//检测表数据是否损坏。

#repair table 表名。//修复表数据。

PS:

为了安全起见,以下两种方法不建议在生产环境中使用

#mysqlcheck -a -o -r -p //检查优化并修复所有的数据库

#mysqlcheck -A -o -r 数据库名称 -p //修复指定的数据库

参数含意:

-a = Analyse given tables. //分析数据表

-c = Check table for errors //检查数据库中错误(损坏)的表

-o = Optimise table //优化数据表

-r = Can fix almost anything except unique keys that aren’t unique // 修复损坏的数据表

-m = –medium-check //

mysqlcheck说明:

mysqlcheck客户端可以检查和修复MyISAM表。它还可以优化和分析表。

mysqlcheck 的功能类似myisamchk,但其工作不同。主要差别是当mysqld服务器在运行时必须使用mysqlcheck,而myisamchk应用于服务器 没有运行时。使用mysqlcheck的好处是不需要停止服务器来检查或修复表。使用myisamchk修复失败是不可逆的。

Mysqlcheck为用户提供了一种方便的使用SQL语句CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABLE的方式。它确定在要执行的操作中使用使用哪个语句,然后将语句发送到要执行的服务器上。

你可能感兴趣的:(mysql,修复)