MariaDB数据库损坏:引擎中不存在表

sf_*_*anb 10 mysql innodb mariadb

我正处于环境设置中,运行OSX MariaDB 10.0.12-MariaDB Homebrew

我搞砸了安装,所以我从我的设置中完全删除了MySQL和MariaDB,然后重新开始.

完成MariaDB的安装后,我innoDB通过生产服务器上的DB Dump 重新导入了我的数据库().它工作正常.重新启动后,第二天,我无法再访问数据库:

Table 'my.table' doesn't exist in engine

造成这种情况的原因是什么?解决方案是什么?我确实看到了我的数据库的结构,但是当我尝试访问它时,它给了我这个错误信息.

我确实尝试mysql-upgrade --force删除了rm ib_logfile1 ib_logfile0

这里的数据丢失不是问题,问题是我每次重启时都不能花30分钟重新安装每个数据库.

这是一些日志:

140730  9:24:13 [Note] Server socket created on IP: '127.0.0.1'.
140730  9:24:14 [Note] Event Scheduler: Loaded 0 events
140730  9:24:14 [Warning] InnoDB: Cannot open table mysql/gtid_slave_pos from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
140730  9:24:14 [Warning] Failed to load slave replication state from table mysql.gtid_slave_pos: 1932: Table 'mysql.gtid_slave_pos' doesn't exist in engine
140730  9:24:14 [Note] /usr/local/Cellar/mariadb/10.0.12/bin/mysqld: ready for connections.
Version: '10.0.12-MariaDB'  socket: '/tmp/mysql.sock'  port: 3306  Homebrew
140730 16:26:28 [Warning] InnoDB: Cannot open table db/site from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
Run Code Online (Sandbox Code Playgroud)

aku*_*sky 12

有些东西删除了你的ibdata1文件,其中InnoDB保存了字典.绝对不是MySQL谁做到了.

  • 我很欣赏这个视频,但是你能写一个指南而不是一个小时的视频吗? (4认同)
  • 有关从中恢复的建议吗? (3认同)
  • @akuzminsky请你写一下如何恢复? (2认同)
  • @AdamTuttle,对于任何来到这里的人,根据您的情况,您可能会发现调用 `mysqldump --all-databases > sql_file.sql`、卸载/重新安装 mysql,然后调用 `mysql sql_file.sql` 很有帮助 (2认同)
  • @ user10089632,如果数据库缺少应该存在的表的* .ibd文件,则mysqldump将得到一个错误并且不生成任何数据,因此不要过于信任这种方法。 (2认同)

小智 6

就我而言,重新启动操作系统并重新启动 MariaDB 服务器后,错误消失了。奇怪的。

  • 也为我工作过。至少有时候解决方案可以如此简单 (3认同)

lvt*_*000 5

好的,我这个周末在我的OpenStack环境崩溃时遇到了这个问题。关于该问题的另一篇文章即将发布。

我找到了一个适用于我的解决方案,该解决方案可以在以Fedora 25服务器为主机的Ver 15.1 Distrib 10.1.21-MariaDB下运行的SQL Server实例中使用。 如果您完全复制了旧的mariadb服务器的/ var / lib / mysql目录,并且正在复制的数据库尚未损坏,请不要听其他所有说数据库已损坏的帖子。此过程基于操作系统已损坏但其文件仍可访问的系统

这是我遵循的步骤。

  1. 确保仅在NEW服务器上完全卸载了任何当前版本的SQL。另外,通过运行以下命令,确保新旧服务器上的所有mysql服务器或mariadb服务器进程均已停止:

    服务mysqld停止或服务mariadb停止。

  2. 在NEW SQL服务器上,进入/ var / lib / mysql目录,并确保该目录中根本没有文件。如果此目录中有文件,则您从新计算机中删除数据库服务器的过程无法正常工作,并且可能已损坏。确保将其从新计算机上完全卸载。

  3. 在OLD SQL服务器上:

    mkdir / OLDMYSQL-DIR cd / OLDMYSQL-DIR tar cvf mysql-olddirectory.tar / var / lib / mysql gzip mysql-olddirectory.tar

  4. 确保在旧服务器和新服务器上都运行了sshd。确保两台服务器之间存在网络连接。

  5. 在新的SQL服务器上:

    mkdir / NEWMYSQL-DIR

  6. 在OLD SQL服务器上:

    cd / OLDMYSQL-DIR scp mysql-olddirectory.tar.gz @:/ NEWMYSQL-DIR

  7. 在新的SQL服务器上:

    cd / NEWMYSQL-DIR gunzip mysql-olddirectory.tar.gz或tar zxvf mysql-olddirectory.tar.gz(如果tar zxvf不起作用)tar xvf mysql-olddirectory.tar.gz

  8. 现在,您应该在NEWMYSQL-DIR中有一个“ mysql”目录文件。抵制没有开关就单独运行“ cp”命令的冲动。不起作用。运行以下“ cp”命令,并确保使用与我相同的开关。

    cd mysql / cp -rfp * / var / lib / mysql /

  9. 现在,您应该在NEW服务器上拥有所有旧SQL Server文件的副本,并且具有完整的权限。在新的SQL服务器上:

    cd / var / lib / mysql /

非常重要的一步。请勿跳过

> rm -rfp ib_logfile*
Run Code Online (Sandbox Code Playgroud)
  1. 现在,在新的SQL服务器上安装mariadb-server或mysql-server。如果已经安装和/或正在运行它,那么您就没有遵循指示,这些步骤将失败。

对于MARIADB服务器和DNF:

> dnf install mariadb-server
> service mariadb restart
Run Code Online (Sandbox Code Playgroud)

对于MYSQL-SERVER和YUM:

> yum install mysql-server
> service mysqld restart
Run Code Online (Sandbox Code Playgroud)

  • 在我将旧的mysql安装中的数据文件夹内容复制到新的mariadb中之后,这一点“> rm -rfp ib_logfile *”便为我修复了错误 (2认同)