zoukankan      html  css  js  c++  java
  • Myisamchk使用

    Myisam损坏的情况:

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

    2 磁盘损坏。

    3 服务器死机。

    4 mysql 本身的bug

    MySQLMyISAM表损坏的症状

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

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

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

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

     

    注意点

    :只用于Myisam表,不支持分区表

    在执行表修复的时候,最好对要修复的表进行备份

    需要注意的是:必须确保没有其他的程序在用着想要修复的表。最好关闭数据库,或者锁定所有的表flush tables table_name,包括缓存中的表,也要刷新否则会出现warning: clients are using or haven't closed the table properly

    使用

    命令格式: myisam [options] tbl_name

    参数

    --slient,-s 只输出错误,-ss更少的输出

    --extend-check, -e 完全的检查表,如果表有很多的索引的话,那么将很慢,可以增加key_buffer_size变量

    --fast,-F 检查那些,没有合理关闭的表

    --force,-f 如果发现任何错误,它将会自动执行修复工作,不建议使用,可能会出现数据丢失

    --medium-check,-m 比--extend-check 快点,一般可以修复大部分的错误。比较常用

    --bakkup,-B 数据文件MYD将被备份为file_name-time.BAK

    --quick,-q 只对索引文件进行修复,不对数据文件操作

    --recover,-r 可以修复大部分的情况的错误,除了唯一键不唯一except unique keys that are not unique,即出现两此同样的数据。一般首先尝试这项来修复表。

    --safe-recover,-o 一般--recover修复不了的问题可以使用这项在来修复,按顺序读取所有的表,但时间巨大

     

    实际上,-r,-o就是遍历或者扫描整个表,中间建立临时文件存放抽取的信息,最后把源文件给删除,所以在使用-r,-o时,最好加上-B参数

     

    没有指定参数myisam只是简单的检查表

    在使用Myisam时,如果没有在数据库目录下,指定好路径。

    检测索引文件:myisamchk /path/to/database_dir/*.MYI

    推荐快速的检查表文件myisamchk --silent --fast /path/to/datadir/*/*.MYI

    如果想检查并修复任何的表损坏的地方,可以使用

    myisamchk --silent --force --fast --update-state

    --key_buffer_size=64M --myisam_sort_buffer_size=64M

    --read_buffer_size=1M --write_buffer_size=1M

    /path/to/datadir/*/*.MYI

    如果用Myisamchk来修复很大的表的时候,而此时你的内存空闲的很多,那么可以适当的增大Myisamchk在操作时可使用的内存,另外磁盘的剩余空间最好可达到数据文件的两倍。

    Example:

    if you have more than 512MB RAM available, you could use options such as these (in addition to any other

    options you might specify):

     

    shell> myisamchk --myisam_sort_buffer_size=256M

    --key_buffer_size=512M

    --read_buffer_size=64M

    --write_buffer_size=64M

    Using --myisam_sort_buffer_size=16M is probably enough for most cases.

    常用的检查命令

    快速的检查

    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优化表

    -r tbl_name 碎片整理

    -S 对索引进行排序,优化键值的速度

    -R 1 对指定的索引进行排序(show index from tbl_name)

    一般检查修复的办法

    1.首先根据mysql客户终端或myisamchk -im ..检查错误码或者问题

    然后perror查看具体的问题

     

    2.关闭mysqld或者锁表

     

    3.常用的修复命令

    myisamchk -rq tbl_name

    myisamchk -Br tbl_name

    myisamchk -Br tbl_name

     

    EXAMPLE:

    使用Myisamchk恢复丢失的索引文件

     

    先把.MYD文件mv到其他目录下

    使用锁定表结构。

    重新创建.MYD 和 .MYI文件。注意权限是mysql

    修复表repair tables t2 use_frm;

    copy会刚才的数据文件.MYD

    修复表myisamchk -r t2;

  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/wxl-dede/p/5061270.html
Copyright © 2011-2022 走看看