mysql数据库修复

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

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

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

  #ssh root@1.1.1.1 //回车,输入密码。

  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 root@1.1.1.1 //回车,输入密码。

  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的方式。它确定在要执行的操作中使用使用哪个语句,然后将语句发送到要执行的服务器上。

 

发表评论

邮箱地址不会被公开。 必填项已用*标注