Mysql关于修复数据表自动进行脚本修复的问题

    作者:课课家教育更新于: 2016-03-14 11:23:12

      MySQL有关于数据表进行自动脚本修复的功能,在mysql中,各种错误的操作都会都会造成了mysql表遭破坏,不过庆幸,mysql的自动修复脚本很厉害,可以帮助我们快速进行数据表的修复。

    Mysql关于修复数据表自动进行脚本修复的问题_数据库_脚本修复_课课家

      mysql进程在一个写入中被杀死、计算机意外关闭、硬件错误都能造成mysql表损坏。

      mysql修复表的各种方法

      1、mysqlcheck进行表修复

      使用mysqlcheck命令对表进行修复

      #mysqlcheck-uuser-ppassworddatabasetable-c#检查单个表是否损坏

      #mysqlcheck-uuser-ppassworddatabase-c#检查整个库那些表损坏

      首先检查数据库的那些表损坏,如果能定位到那张表损坏可以直接对表修复

      #mysqlcheck-uuser-ppassworddatabasetable-r#修复数据表

      #mysqlcheck-uuser-ppassworddatabase-r#修复整个数据库

      更多参数查看mysqlcheck–help

      2、myisamchk修复mysql表

      Myisamchk是MyISAM表维护的一个非常实用的工具。可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。

      Myisamchk选项解释

      –debug=debug_options,-#debug_options

      输出调试记录文件。debug_options字符串经常是’d:t:o,filename’。

      –silent,-s

      沉默模式。仅当发生错误时写输出。

      –wait,-w

      如果表被锁定,不是提示错误终止,而是在继续前等待到表被解锁。

      如果不使用–skip-external-locking,可以随时使用myisamchk来检查表。当检查表时,所有尝试更新表的客户端将等待,直到myisamchk准备好可以继续。

      请注意如果用–skip-external-locking选项运行mysqld,只能用另一个myisamchk命令锁定表。

      –var_name=value

      可以通过–var_name=value选项设置下面的变量:

      –check,-c

      检查表的错误。如果你不明确指定操作类型选项,这就是默认操作。

      –check-only-changed,-C

      只检查上次检查后有变更的表。

      –extend-check,-e

      非常仔细地检查表。如果表有许多索引将会相当慢。

      –fast,-F

      只检查没有正确关闭的表。

      –force,-f

      如果myisamchk发现表内有任何错误,则自动进行修复。

      –information,-i

      打印所检查表的统计信息。

      –medium-check,-m

      比–extend-check更快速地进行检查。只能发现99.99%的错误

      –update-state,-U

      将信息保存在.MYI文件中,来表示表检查的时间以及是否表崩溃了。该选项用来充分利用–check-only-changed选项,

      但如果mysqld服务器正使用表并且正用–skip-external-locking选项运行时不应使用该选项。

      –read-only,-T

      不要将表标记为已经检查。如果你使用myisamchk来检查正被其它应用程序使用而没有锁定的表很有用

      –backup,-B

      将.MYD文件备份为file_name-time.BAK

      –character-sets-dir=path

      字符集安装目录。

      –correct-checksum

      纠正表的校验和信息。

      –data-file-length=len,-Dlen

      数据文件的最大长度

      –extend-check,-e

      进行修复,试图从数据文件恢复每一行。一般情况会发现大量的垃圾行。不要使用该选项,除非你不顾后果。

      –force,-f

      覆盖旧的中间文件(文件名类似tbl_name.TMD),而不是中断

      –keys-used=val,-kval

      对于myisamchk,该选项值为位值,说明要更新的索引。选项值的每一个二进制位对应表的一个索引,其中第一个索引对应位0。

      选项值0禁用对所有索引的更新,可以保证快速插入。通过myisamchk-r可以重新激活被禁用的索引。

      –parallel-recover,-p

      与-r和-n的用法相同,但使用不同的线程并行创建所有键。

      –quick,-q

      不修改数据文件,快速进行修复。

      –recover,-r

      可以修复几乎所有一切问题,除非唯一的键不唯一时(对于MyISAM表,这是非常不可能的情况)。如果你想要恢复表,

      这是首先要尝试的选项。如果myisamchk报告表不能用-r恢复,则只能尝试-o。

      在不太可能的情况下-r失败,数据文件保持完好)。

      –safe-recover,-o

      使用一个老的恢复方法读取,按顺序读取所有行,并根据找到的行更新所有索引树。这比-r慢些,

      但是能处理-r不能处理的情况。该恢复方法使用的硬盘空间比-r少。一般情况,你应首先用-r维修,如果-r失败则用-o。

      –sort-recover,-n

      强制myisamchk通过排序来解析键值,即使临时文件将可能很大。

      –analyze,-a

      分析键值的分布。这通过让联结优化器更好地选择表应该以什么次序联结和应该使用哪个键来改进联结性能。

      要想获取分布相关信息,使用myisamchk–description–verbosetbl_name命令或SHOWKEYSFROMtbl_name语句。

      –sort-index,-S

      以从高到低的顺序排序索引树块。这将优化搜寻并且将使按键值的表扫描更快。

      –set-auto-increment[=value],-A[value]

      强制从给定值开始的新记录使用AUTO_INCREMENT编号(或如果已经有AUTO_INCREMENT值大小的记录,应使用更高值)。

      如果未指定value,新记录的AUTO_INCREMENT编号应使用当前表的最大值加上1。

      –description,-d

      打印出关于表的描述性信息。

      检查表

      [root@nagiOStest]#myisamchk-ewpusers.MYI

      CheckingMyISAMfile:wpusers.MYI

      Datarecords:1Deletedblocks:0

      -checkfile-size

      -checkrecorddelete-chain

      -checkkeydelete-chain

      -checkindexreference

      -checkdatarecordreferencesindex:1

      -checkdatarecordreferencesindex:2

      -checkdatarecordreferencesindex:3

      -checkrecordsandindexreferences

      myisanchk修复表

      [root@nagiostest]#myisamchk-rwpusers.MYI

      -recovering(withsort)MyISAM-table‘wpusers.MYI’

      Datarecords:1

      -Fixingindex1

      -Fixingindex2

      -Fixingindex3

      3、自动修复mysql表脚本

      #!/bin/bash

      #Thisscripteditbybadboyconnectleezhenhua17@163.com

      #Thisscriptusedbyrepairtables

      mysql_host=localhost

      mysql_user=root

      mysql_pass=123456

      database=test

      tables=$(mysql-h$mysql_host-u$mysql_user-p$mysql_pass$database-A-Bse“showtables”)

      forargin$tables

      do

      check_status=$(mysql-h$mysql_host-u$mysql_user-p$mysql_pass$database-A-Bse“checktable$arg”|awk‘{print$4}’)

      if["$check_status"="OK"]

      then

      echo“$argisok”

      else

      echo$(mysql-h$mysql_host-u$mysql_user-p$mysql_pass$database-A-Bse“repairtable$arg”)

      fi

      echo$(mysql-h$mysql_host-u$mysql_user-p$mysql_pass$database-A-Bse“optimizetable$arg”)

      done

课课家教育

未登录