如何在 MariaDB 中删除损坏的 INNODB 数据库?

Tek*_*Ops 5 innodb mariadb

如果您尝试访问 INNODB 类型数据库中的表,而 MariaDB 告诉您它不存在,则您的数据库已损坏。

(我发这个问题是因为所有现有的问题都被各种版主“关闭”了,他们没有一个真正的答案。他们讨论了 INNODB 的复杂性,最终你必须通过一个折磨人的方式重建整个数据库服务器过程。)

Tek*_*Ops 5

这可能不适用于每个人,但它确实对我们有用过几次:

  1. 停止数据库(service mysql stop)
  2. 编辑 mysql.cnf 以便在 [mysqld] 部分下它具有:

    [mysqld] 
    innodb_force_recovery = 1 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 启动数据库(service mysql start),在日志文件中你会看到它强制加载坏的数据库/表

  4. 以 root 身份登录数据库服务器:mysql -u root

  5. 运行命令“show databases[ENTER]”以获取数据库列表

  6. 运行命令“drop [dbname][ENTER]”,其中 [thedb] 是您需要删除的数据库。它会删除它,但会抱怨它无法删除目录 ./[thedb]。

  7. 打开一个单独的 shell 并进入 /var/lib/mysql/[thedb]/ 并删除那里的文件。

  8. 停止数据库(service mysql stop)

  9. 通过注释掉 mysql.cnf 中的行来关闭 REPAIR 模式

    [mysqld]
    #innodb_force_recovery = 1 
    
    Run Code Online (Sandbox Code Playgroud)
  10. 使用以下命令重新启动数据库:

    service mysql start[ENTER]
    
    Run Code Online (Sandbox Code Playgroud)

瞧。

现在重新创建数据库并从备份中恢复。

谢谢,大卫