• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    解决MySQL数据库意外崩溃导致表数据文件损坏无法启动的问题

    问题故障:

    MySQL数据库意外崩溃,一直无法启动数据库。

    报错日志:

    启动报错:service mysqld restart

    ERROR! MySQL server PID file could not be found!
    Starting MySQL. ERROR! The server quit without updating PID file (/www/wdlinux/mysql/var/iZ2358oz5deZ.pid).

    数据库error日志:

    200719 22:07:43 InnoDB: Database was not shut down normally!
    InnoDB: Starting crash recovery.
    InnoDB: Reading tablespace information from the .ibd files...
    InnoDB: Error: trying to add tablespace 840 of name './ob_wp/ob_termmeta.ibd'
    InnoDB: to the tablespace memory cache, but tablespace
    InnoDB: 840 of name './dev_nss/dg_queue.ibd' already exists in the tablespace
    InnoDB: memory cache!
    200719 22:07:43 mysqld_safe mysqld from pid file /www/wdlinux/mysql/var/iZ2358oz5deZ.pid ended

    提示:数据库启动时读取表空间信息时,ob-wp库中的表ob_users.ibd表数据文件已存在于表空间中。

    拓展:

    存储引擎是myisam, 在数据库目录下会看到3类文件:.frm、.myi、.myd
    (a) *.frm--表定义,是描述表结构的文件。
    (b) *.MYD--"D"数据信息文件,是表的数据文件。
    (c) *.MYI--"I"索引信息文件,是表数据文件中任何索引的数据树
    存储引擎是InnoDB, 在data目录下会看到2类文件:.frm、.ibd
    (a) *.frm--表结构的文件。
    (b) *.ibd--表数据文件

    出处:https://www.cnblogs.com/liucx/

    方法一:

    根据提示信息判定该InnoDB表损坏,于是尝试将dev_nss库目录中的表结构和表数据文件备份
    mv ob_termmeta.ibd ob_termmeta.ibd,bak
    mv ob_termmeta.frm ob_termmeta.frm.bak
    然后重启了下mysql,发现还是无法启动,提示其他表数据文件已存在,连续3次将已损坏的文件备份,还是无法启动。故放弃此方法。

    方法二:

    1.查阅官网文档,在mysql配置文件中/etc/my.cnf添加配置,成功启动
    [mysqld]
    innodb_force_recovery = 1

    2.备份数据库
    mysqldump -h172.168.2.100 -uroot -p -A > mysql_all_bak.sql
    如遇报表不存在,mysqldump可以添加参数:--force ,跳过错误

    3.删除数据库
    drop database hxdb; 或者将数据库数据库目录 mv hxdb hxdb_bak (保险)

    4.去掉参数 innodb_force_recovery
    将之前设置的参数去掉后,重新启动数据库

    5.导入数据
    mysql -uroot -p mysql_all_bak.sql
    Warning: Using a password on the command line interface can be insecure.
    ERROR 1050 (42S01) at line 25: Table '`hxdb`.`tb_info`' already exists

    如果提示表已经存在,这是因为将innodb_force_recovery参数去掉后,数据库会进行回滚操作,会生成相应的ibd文件,所以需要将该文件删除掉,删除后重新导入
    mysql -uroot -p mysql_all_bak.sql

    注:

    innodb_force_recovery参数解释:崩溃恢复模式,通常只有在严重故障排除情况下才会改变。可以的值是从0到6。

    只有在紧急情况下才将这个变量设置为大于0的值,这样你才能启动InnoDB并转储你的表。作为一种安全措施,当innodb_force_recovery大于0时,InnoDB可以防止插入、更新或删除操作。
    在5.6.15,innodb_force_recovery设置为4或更大,将InnoDB设置为只读模式。由于relay_log_info_repository=TABLE和master_info_repository=TABLE在InnoDB表中存储信息,这些限制可能导致复制管理命令失败并出现错误。

    innodb_force_recovery默认情况下为0(正常启动而不强制恢复)。允许的非零值 innodb_force_recovery是1到6。较大的值包括较小值的功能。例如,值3包含值1和2的所有功能。
    如果能够转储 innodb_force_recovery值为3或更小的表,则相对安全的是,仅丢失损坏的单个页面上的某些数据。4或更大的值被认为是危险的,因为数据文件可能会永久损坏。值6被认为是过分的,因为数据库页面处于过时状态,这反过来可能会使B树 和其他数据库结构遭受更多破坏。

    为了安全起见,请InnoDB防止 INSERT, UPDATE或 DELETE在innodb_force_recovery大于0 时进行操作 。从MySQL 5.6.15开始, 在只读模式下innodb_force_recovery设置4个或更多位置InnoDB。
    1 (SRV_FORCE_IGNORE_CORRUPT)
    让服务器运行,即使它检测到一个损坏的页面。尝试让SELECT * FROM tbl_name跳过损坏的索引记录和页面,这有助于转储表。
    2 (SRV_FORCE_NO_BACKGROUND)
    阻止主线程和任何清除线程运行。如果在清除操作期间发生崩溃,则此恢复值将防止崩溃。
    3 (SRV_FORCE_NO_TRX_UNDO)
    在崩溃恢复后不运行事务回滚。
    4 (SRV_FORCE_NO_IBUF_MERGE)
    防止插入缓冲区合并操作。如果它们会导致崩溃,就不要做。不计算表统计信息。此值可能永久损坏数据文件。使用此值后,准备删除并重新创建所有二级索引。在MySQL 5.6.15中,将InnoDB设置为只读。
    5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
    启动数据库时不要查看撤销日志:InnoDB甚至会将未完成的事务视为已提交。此值可能永久损坏数据文件。在MySQL 5.6.15中,将InnoDB设置为只读。
    6 (SRV_FORCE_NO_LOG_REDO)
    在恢复时不执行重做日志前滚。此值可能永久损坏数据文件。使数据库页面处于过时状态,这反过来可能会给b -树和其他数据库结构带来更多损坏。在MySQL 5.6.15中,将InnoDB设置为只读。

    出处:https://www.cnblogs.com/liucx/

    参阅官网:
    https://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
    https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_force_load_corrupted

    希望能帮到你

    到此这篇关于MySQL数据库意外崩溃导致表数据文件损坏无法启动的问题解决的文章就介绍到这了,更多相关MySQL数据库意外崩溃导致表数据文件损坏无法启动的问题解决内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • MySQL 利用frm文件和ibd文件恢复表数据
    • MySQL之导出整个及单个表数据的操作
    • MySQL Delete 删数据后磁盘空间未释放的原因
    • ubuntu下磁盘空间不足导致mysql无法启动的解决方法
    • Mysql存储引擎MyISAM的常见问题(表损坏、无法访问、磁盘空间不足)
    • lnmp下如何关闭Mysql日志保护磁盘空间
    • 几个缩减MySQL以节省磁盘空间的建议
    • Mysql InnoDB删除数据后释放磁盘空间的方法
    • 为什么MySQL 删除表数据 磁盘空间还一直被占用
    上一篇:快速了解MySQL 索引
    下一篇:详解MySQL监控工具 mysql-monitor
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    解决MySQL数据库意外崩溃导致表数据文件损坏无法启动的问题 解决,MySQL,数据库,意外,