mysql修复表的三个方法

mysql修复表的三个方法

大家好,又见面了,我是全栈君。

断电或非正常关机可能导致MySQL数据库出现表损坏,特别是MyISAM表数据很大的时候。有三种方法,一种方法使用MySQL的repair table的sql语句,另一种方法是使用MySQL提供的myisamchk,,最后一种是mysqlcheck命令行工具。

1.repair table(建议方法,对MyISAM引擎表有用)
(1)check table tabTest;
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:

(2)repair table tabTest;
进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

2. myisamchk(该工具必须运行在服务终止条件下,对MyISAM引擎表有用)
(1)myisamchk tablename.MYI
进行检测。

(2)myisamchk -of tablename.MYI
网上说的其它方法:
那么修复test表的方法为
myisamchk -r -q /var/lib/mysql/db/test.MYI
如果修复全部表,用这个命令
myisamchk -r -q /var/lib/mysql/db/*.MYI

3.运行mysqlcheck命令行工具(该工具可以在服务运行状态下执行)

转自:https://blog.csdn.net/orangleliu/article/details/63275154

检查特定的表:
如果应用中提示某个表坏了,使用下面的命令来检查。
$ mysqlcheck -c newmandela order -uroot -p
Enter password:
newmandela.order                                   OK
newmandela 是库名, order是表名,还需要输入用户名和密码

检查一个库中的所有表:
$ mysqlcheck -c newmandela -uroot -p
Enter password:
newmandela.account                                 OK
newmandela.alarm                                   OK
newmandela.alarm_settings                          OK
newmandela.auth_group                              OK
newmandela.auth_group_permissions                  OK
newmandela.auth_permission                         OK

检查所有库中的所有表:
全部的库和表都检查一遍了。
$mysqlcheck -c –all-databases -uroot -p
Enter password:
apmonitor.acinfo                                   OK
apmonitor.apdailysts                               OK
apmonitor.apinfo                                   OK
apmonitor.apmonthsts                               OK
apmonitor.apscanlog                                OK
apmonitor.auth_group                               OK

如果只想检查某几个库呢? 可以使用 –databases 参数:
$ mysqlcheck -c –databases newmandela radius -uroot -p
Enter password:
newmandela.account                                 OK
newmandela.alarm                                   OK
newmandela.alarm_settings                          OK
newmandela.auth_group                              OK

使用 mysqlcheck 分析表:
$ mysqlcheck -a radius payment_transactionrecord  -uroot -p
Enter password:
radius.payment_transactionrecord                   Table is already up to date

上面的命令 用来分析 radius 库的 payment_transactionrecord表, -a 表示 analyze
使用 mysqlcheck 优化表:
# mysqlcheck -o radius payment_transactionrecord  -uroot -p
Enter password:
radius.payment_transactionrecord                   OK

-o 代表 optimize ,这里是优化 radius 库的 payment_transactionrecord 表
使用 mysqlcheck 修复表:
# mysqlcheck -r radius payment_transactionrecord  -uroot -p
Enter password:
radius.payment_transactionrecord                   OK

-r 代表 repair ,这里是 修复 radius 库的 payment_transactionrecord 表
检查,优化,修复表组合命令:
# mysqlcheck -uroot -p –auto-repair -c -o newmandela
Error:  mysqlcheck doesn’t support multiple contradicting commands.

上面的命令报错了,去掉 -c
# mysqlcheck -uroot -p –auto-repair -o newmandela
Enter password:
newmandela.account
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
newmandela.alarm
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
newmandela.alarm_settings
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK

每张表都出现了 Table does not support optimize, doing recreate + analyze instead, 代表什么意思呢? 它的意思不是说 innodb 引擎不支持 优化,可以参考 http://stackoverflow.com/questions/30635603/what-does-table-does-not-support-optimize-doing-recreate-analyze-instead-me 的回答。
mysqlcheck 常用选项

    A, –all-databases 表示所有库
    -a, –analyze 分析表
    -o, –optimize 优化表
    -r, –repair 修复表错误
    -c, –check 检查表是否出错
    –auto-repair 自动修复损坏的表
    -B, –databases 选择多个库
    -1, –all-in-1 Use one query per database with tables listed in a comma separated way
    -C, –check-only-changed 检查表最后一次检查之后的变动
    -g, –check-upgrade Check for version dependent changes in the tables
    -F, –fast Check tables that are not closed properly
    –fix-db-names Fix DB names
    –fix-table-names Fix table names
    -f, –force Continue even when there is an error
    -e, –extended Perform extended check on a table. This will take a long time to execute.
    -m, –medium-check Faster than extended check option, but does most checks
    -q, –quick Faster than medium check option

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112096.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Linux下GCC编译器的安装「建议收藏」

    Linux下GCC编译器的安装「建议收藏」通过aptget方式下载的Qt5.9的gcc编译器版本只是4.8.3,无法打开一些Qt5的库头文件,所以准备在Llinux下再安装一个gcc5.3.0。查看gcc版本ubuntu下查看gcc的版

  • 计算机主机号是什么意思,在一台计算机的IP地址中,网络号和主机号指的是什么?…「建议收藏」

    计算机主机号是什么意思,在一台计算机的IP地址中,网络号和主机号指的是什么?…「建议收藏」匿名用户1级2014-09-29回答根据子网掩码,如255.255.255.0的子网掩码,三个255对应的就是网络号,0对应的就是主机号,202.119.32.8就是202.119.32是网络号,8是主机号子网掩码(1)子网TCP/IP网间网技术产生于大型主流机环境中,它能发展到今天的规模是当初的设计者们始料未及的。网间网规模的迅速扩展对IP地址模式的威胁并不是它不能保证主机地址的唯一性,而是会…

  • Oracle number类型详解

    Oracle number类型详解Oraclenumber类型详解简介基本说明容易出错情况Number与MySQL数据类型简介Oracle的number类型比较复杂,很多限制,但是掌握一点小技巧就能轻松搞定。基本说明number(precision,scale)precision表示数字中的有效位,从左边第一个不为0的数算起,小数点和负号不计入有效位数precision的取值范围是[1,38]precision默认值为38,number等价于number(38)scale大于0,表示数字精确到小数点右边的位数,numb

  • PHPStorm2017.1.3永久激活方法之本地激活成功教程激活

    PHPStorm2017.1.3永久激活方法之本地激活成功教程激活是时候升级你的phpstorm了,咱们马上行动!下载1、phpstormhttps://www.jetbrains.com/phpstorm/download/2、激活成功教程包激活成功教程补丁无需使用注册码,下载

  • Linux 定时执行shell 脚本「建议收藏」

    Linux 定时执行shell 脚本「建议收藏」2019年第85篇文章,总第109篇文章本文大约2000字,阅读大约需要6分钟crontab可以在指定的时间执行一个shell脚本以及执行一系列Linux命令。定时执行sh…

  • 激光雷达和超声波雷达区别_雷达是超声波还是电磁波

    激光雷达和超声波雷达区别_雷达是超声波还是电磁波转自:http://www.sohu.com/a/201826967_524185不知何时,自动驾驶技术从电影中跳出来,直接被拉到人们视野中。不过,去年特斯拉却因为几起自动驾驶事故,官网不得不把自动驾驶字眼改为辅助驾驶。本期《汽车总动员》讨论的不是自动驾驶,而是被称为自动驾驶汽车“眼睛”的雷达。目前主流的“眼睛”有四类——毫米波雷达、激光雷达、超声波雷达、摄像头。他们各自都有自己的特点,比如摄像头…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号