当前位置:  数据库>mysql

MySQL数据库表修复 MyISAM

    来源: 互联网  发布时间:2014-10-16

    本文导语:  一:MySQL中MyISAM表损坏原因总结: 1、 服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉。 2、 磁盘损坏。 3、 服务器死机。 4、 mysql 本身的bug 。 二:MySQL中MyISAM表损坏的症状总结:...

一:MySQL中MyISAM表损坏原因总结:

1、 服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉。
2、 磁盘损坏。
3、 服务器死机。
4、 mysql 本身的bug 。

二:MySQL中MyISAM表损坏的症状总结:

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) 。

三:MySQL中MyISAM表损坏的预防:

1 、定期检查MyISAM 表。可以使用myisamchk,也可以使用mysqlcheck,还可以使用check table。
2 、在做过大量的更新或删除操作后,使用mysqlcheck或者optimize table来优化表,这样既减少了文件碎片,又减少了表损坏的概率。 3 、关闭服务器前,先关闭mysqld (正常关闭服务,不要使用kill -9 来杀进程)。
4 、使用ups 电源,避免出现突然断电的情况。
5 、使用最新的稳定发布版mysql ,减少mysql 本身的bug 导致表损坏。
6 、对磁盘做raid ,减少磁盘出错并提高性能。
7 、数据库服务器最好只跑mysqld 和必要的其他服务,不要跑其他业务服务,这样减少死机导致表损坏的可能。

四:MySQL中MyISAM表损坏的修复总结:

1 、如果mysqld已经宕掉,且无法启动,那么可以通过mysiamchk工具来进行修复。此工具在mysqld服务没有启动时才可以使用。该工具可以检查并分析修复MyISAM表。
2 、如果mysqld仍在运行,或者可以重新启动,那么可以通过mysqlcheck工具来进行修复。或者直接通过mysql的内置修复SQL语句来修复:CHECK TABLE,REPAIR TABLE ,ANALYSE TABLE,OPTIMIZE TABLE。这两种方法可以同样达到对表的修复作用。 以上两种方式各有应用场景。

MySQL数据表损坏的巧妙修复 修复mysql表之前首先要知道是哪个表出了问题

可以用root登录后在information_schema里查找有问题的表名

select TABLE_SCHEMA as DB_DBNAME,TABLE_NAME from INFORMATION_SCHEMA.tables where engine is null;

可以通过事件查看器里是否有

应用程序日志--类型为"错误"--事件来源为"Mysql"的错误日志,大概内容为

1 xxxxx: Table '.xxxx' is marked as crashed and should be repaired

或者直接在phpmyadmin中查看有哪些表出了问题比如显示“使用中”

如果查到问题表后,可以使用一下命令来修复mysql数据库中的MYISAM表

1、check, repair

例如abc的test表有问题

代码如下:

# mysql -u root -p 'abc';   //登录mysql控制台,并进入abc数据库
mysql> check table test;  //如果有问题Msg_type里会有warning或error。没有问题的话出现的结果Status是OK
mysql> repair table test;  // 修复test表(多个表名用“逗号”隔开)
mysql> check table test; // 再次检查确认是否修复成功

2. myisamchk, isamchk

其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的MySQL数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:

myisamchk tablename.MYI

进行检测,如果需要修复的话,可以使用:

myisamchk -of tablename.MYI

关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个MySQL数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。

mysqladmin -uroot -p shutdown

另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:

[ -x /tmp/MySQL.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI

其中的/tmp/MySQL.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/MySQL/MySQL.sock,对于使用源码安装则是/tmp/MySQL.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。

需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!

3、检测修复所有数据库(表)

代码如下:

MySQLcheck -A -o -r -p
mysqlcheck --all-databases -r

    
 
 

您可能感兴趣的文章:

  • 快速修复损坏的MySQL数据库
  • phpmyadmin显示MySQL数据表“使用中” 修复后依然无效的解决方法
  • mysql修复数据表的命令方法
  • mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)
  • 使用shell检查并修复mysql数据库表的脚本
  • MySQL数据表损坏的正确修复方案
  • 检查并修复mysql数据库表的具体方法
  • MYSQL错误:Can’t open file: ‘×××.MYI’ (errno: 145)修复方法
  • 教您修复mysql数据库的方法
  • mysql 无法连接问题的定位和修复过程分享
  • mysql中优化和修复数据库工具mysqlcheck详细介绍
  • MySQL数据库修复方法(MyISAM/InnoDB)
  • MYSQL数据表损坏的原因分析和修复方法小结(推荐)
  • MySQL数据库INNODB表损坏修复处理过程分享
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • xp下的mysql数据库如何迁移到linux中的mysql
  • Linux和windows下用mysql c++ library操作Mysql数据库
  • 解析mysql数据库还原错误:(mysql Error Code: 1005 errno 121)
  • mysql jdbc连接mysql数据库步骤及常见参数详解
  • mysql数据库中的information_schema和mysql可以删除吗?
  • mysql数据库介绍
  • mysql数据库备份命令分享(mysql压缩数据库备份)
  • mysql数据库下载安装教程和使用技巧
  • Python Mysql数据库操作 Perl操作Mysql数据库
  • 数据库迁移工具 DBConvert for MySQL & PostgreSQL
  • 使用dreamhost空间实现MYSQL数据库备份方法
  • Oracle欲收购开源数据库MySQL未果
  • 请教mysql数据库连接问题
  • 有谁在redhat下安装过Mysql数据库?谢谢了
  • MySQL数据库备份恢复程序 MySQLDumper
  • 网易的MySQL数据库分支 InnoSQL
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql数据类型datetime,date和timestamp比较
  • 如何将mysql的数据文件移到指定目录,而且要保证mysql要运行正常.
  • mysql 命令大全及导入导出表结构或数据
  • mysql 10w级别的mysql数据插入
  • 一句命令完成MySQL的数据迁移(轻量级数据)
  • 怎样让我的程序能像mysql一样运行后有一个mysql>的提示符等待用户输入并解析用户输入的数据然后执行操作?
  • mysql 导入导出数据库、数据表的方法
  • 要访问mysql数据库中排列在最前面的5条数据,怎么班?
  • 删除mysql数据库中的重复数据记录
  • mysql数据库修改数据表引擎的方法
  • Linux下访问MYSQL数据库中数据时出现乱码问题
  • mysql 本地数据库如何从远程数据库导数据
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • 两台Mysql服务器,数据同步
  • {高分200分}jsp访问linux上的mysql数据库,取到和插入的数据全是乱码,我是这样设置的???
  • 将 Ghost 从 SQLite3 数据库迁移到 MySQL 数据库
  • mysql导入mssql数据的方法
  • 取数据库前几条数据(sql server、oracle、mysql)的sql写法
  • PHP删除MYSQL中数据表
  • 异构数据源复制 MySQL Syncer
  • Mysql导出数据的正确方法
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock
  • MYSQL错误:Can’t open file: ‘×××.MYI’ (errno: 145)修复方法 iis7站长之家
  • MySQL 重装MySQL后, mysql服务无法启动
  • php安装完成后如何添加mysql扩展
  • 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • 請教,在redhat linux7.2+mysql 中,系統提示mysql已啟動,網頁卻不能訪問mysql?
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 求解释: useradd -g mysql mysql -d /home/mysql -s /sbin/nologin


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3