mysql 修复模式_Mysql表修复

mysqlcheck

mysqlcheck客户端可以检查和修复MyISAM表。它还可以优化和分析表。mysqlcheck的功能类似myisamchk,但其工作不同。

主要差别是当mysqld服务器在运行时必须使用mysqlcheck,而myisamchk应用于服务器没有运行时。使用mysqlcheck的好处是不需要停止服务器来检查或修复表。

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

示例

mysqlcheck -B 指定数据库 -r -S /data/mysql2/mysql2.sock -u root -p'test' >> /var/log/mysqlcheck.log

常用选项

--optimize,-o 优化表

-h 主机地

-P 端口号

-F 只检查没有正确关闭的表

-r 执行可以修复大部分问题的修复,只是唯一值不唯一时不能修复。

-a 分析表

-c 检查表,默认选项

-m 中等的检查

-e 完全检查,很慢

--database,-B 指定库 如果没指定,表示全部库

--all--database,-A 所有库

--fast,-F 只检查没有正确关闭的表。

--quick,-q 如果你正使用该选项在检查表,它防止扫描行以检查错误链接的检查。这是最快的检查方法。 如果你正使用该选项在修复表,它尝试只修复索引树。这是最快的修复方法。

--silent,-s 沉默模式。只打印错误消息

--tables 覆盖---database或-B选项。选项后面的所有参量被视为表名。

--socket=/-S 指定套接字

myisamchk

myisamchk,只适用于myisam引擎,使用时需要关闭数据库

myisamchk表损坏原因

服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉。因为此时mysql可能正在刷新索引。

磁盘损坏。

服务器死机。

mysql 本身的bug 。

MySQL中MyISAM表损坏的症状

查询数据时报出错误:Incorrect key file for table: '...'. Try to repair it

查询不能在表中找到行或返回不完全的数据。

Error: Table '...' is marked as crashed and should be repaired 。

打开表失败: Can't open file: '×××.MYI' (errno: 145) 。

常见选项

-q 快速修复,一般和-r一起使用,快速修复

-r 修复模式

-o 能修复-r不能修复的问题。一般会有提示使用-o

-i 打印被检测表的信息

-m 中等的检查

-e 最彻底的检查

-a 分析表

-s 安静的

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

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

-f 强制修复,一般不使用,可能会有数据丢失

myisamchk默认只用3M的内存来修复,如果要修复大表的话,显然速度会巨慢,我们可以通过为myisamchk设置更多的内存,来使其运行的更快,

myisamchk --sort_buffer_size=16M --key_buffer_size=16M --read_buffer_size=1M --write_buffer_size=1M

一般sort_buffer_size的大小16m就足够用了。

myisamchk默认使用选项“--tmpdir”作为临时文件的,如果tmpdir指定内存的话,恢复的表比较大,很容易报内存的错误,所以我们可以用tmpdir指定一个比较大的文件系统

myisamchk --sort_buffer_size=16m --key_buffer_size=16m --read_buffer_size=2m --write_buffer_size=1m --tmpdir=/tmp

执行myisam表的恢复只要是修复表的三个文件,最常发生问题的文件是数据文件和索引文件

tbl_name.frm:定义(格式)文件

tbl_name.MYD:数据文件

tbl_name.MYI:索引文件

示例

首先进入到对应的数据库下:cd /data/mysql/game | 也可以直接指定表的路径,从而不用进入目录

检查表

#快速的检查

myisamchk -im /usr/local/mysql/data/testx/t2

#只检查没有正常关闭的表

myisamchk -iFm /usr/local/mysql/data/testx/t2

#仅显示表的最重要的信息

myisamchk -eim /usr/local/mysql/data/testx/t2

修复表

#常用的修复命令

myisamchk -rq tbl_name #快速修复表,只修复索引

myisamchk -Br tbl_name #备份并修复表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值