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

e7arh2l6  于 7个月前  发布在  其他
关注(0)|答案(9)|浏览(197)

我在一个安装程序中,运行OSX和MariaDB 10.0.12-MariaDB Homebrew
我搞砸了安装,所以我完全删除了MySQL和MariaDB从我的设置,并重新开始。
安装完MariaDB后,我通过DB Dump从生产服务器重新导入了我的数据库(innoDB)。效果很好。在重新启动后的第二天,我无法再访问数据库:
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.
q9rjltbz

q9rjltbz1#

某些东西删除了InnoDB保存字典的ibdata1文件。肯定不是MySQL做的

tjjdgumg

tjjdgumg2#

好吧,伙计们,这个周末当我的OpenStack环境崩溃时,我遇到了这个问题。另一篇关于如何恢复的文章即将发布。
我找到了一个解决方案,它适用于在Ver 15.1 Distrib 10.1.21-MariaDB下运行的SQL Server示例,Fedora 25 Server作为主机。如果你完全复制了旧的mariadb服务器的/var/lib/mysql目录,并且你复制的数据库还没有损坏,那么不要听所有其他的帖子说你的数据库已经损坏。此过程基于操作系统已损坏但其文件仍可访问的系统
以下是我遵循的步骤。
1.请确保您已在NEW服务器上完全删除了所有当前版本的SQL。另外,确保新旧服务器上的所有mysql-server或mariadb-server进程都已停止,方法是运行:

service mysqld stop 

# or

service mariadb stop.

1.在新的SQL服务器上,进入/var/lib/mysql目录,并确保该目录中没有任何文件。如果此目录中有文件,则从新计算机中删除数据库服务器的过程不起作用,并且可能已损坏。确保它完全从新机器上删除。
1.在旧SQL Server上:

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

1.确保在旧服务器和新服务器上都运行sshd。确保两台服务器之间存在网络连接。
1.在新的SQL Server上:

mkdir /NEWMYSQL-DIR

1.在旧SQL Server上:

cd /OLDMYSQL-DIR
scp mysql-olddirectory.tar.gz <NEW-SERVER-USERNAME>@<NEW-SERVERIP>:/NEWMYSQL-DIR

1.在新的SQL Server上:

cd /NEWMYSQL-DIR
gunzip mysql-olddirectory.tar.gz  OR tar zxvf mysql-olddirectory.tar.gz

# (if tar zxvf doesn't work) 
tar xvf mysql-olddirectory.tar.gz

1.你现在应该有一个“mysql”目录文件坐在NEWMYSQL-SQL。不要在没有开关的情况下单独运行“cp”命令。这行不通。运行下面的“cp”命令,并确保你使用的开关和我一样。

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

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

cd /var/lib/mysql/

非常重要的一步。不要跳过

rm -rfp ib_logfile

1.现在在新的SQL服务器上安装mariadb-server或mysql-server。如果你已经安装和/或运行它,那么你没有按照指示,这些步骤将失败。
对于MARIADB-SERVER和DNF:

dnf install mariadb-server
service mariadb restart

对于MYSQL-SERVER和YUM:

yum install mysql-server
service mysqld restart
lsmepo6l

lsmepo6l3#

在我的情况下,在我重新启动操作系统并重新启动MariaDB服务器后,错误消失了。奇怪.

pw136qt2

pw136qt24#

这个真的很烂
我尝试了这里建议的所有解决方案,但唯一有效的是

  • 创建新的数据库
  • 在所有运行的表上运行ALTER TABLE old_db.{table_name} RENAME new_db.{table_name}
  • 运行DROP old_db
  • 重新创建old_db
  • new_db中的所有表上运行ALTER TABLE new_db.{table_name} RENAME old_db.{table_name}

一旦你完成了,你就可以再次创建你以前拥有的表格了。

iyfamqjs

iyfamqjs5#

您可以尝试:

  • 从C:\xampp\mysql\data备份数据库文件夹(.frm和.ibd文件仅对应于您的表名称)
  • 重新安装xampp并重新复制DB文件夹到C:\xampp\mysql\data
  • 修改my.ini添加
[mysqld]
innodb_file_per_table = on
  • 然后打开phpmyadmin(或任何其他数据库查看器,如Navicat或MYSQL浏览器)并运行
ALTER TABLE tbl_name IMPORT TABLESPACE

为每个表

  • 一旦你可以打开你的表做一个完整的mysql转储
  • 删除所有内容并进行全新安装

我知道,有很多你不需要的工作要做。

wtzytmuj

wtzytmuj6#

我刚刚遇到了MariaDB/InnoDB的这个问题,并能够通过以下方式修复它:

  • 在另一个MySQL/MariaDB示例的正确数据库中创建所需的表
  • 停止两个服务器
  • 复制.ibd,.frm文件到原始服务器
  • 启动两个服务器
  • 在两台服务器上删除问题表
cigdeys3

cigdeys37#

这个主题需要一段时间来寻找结果和原因:
使用MaiaDB 5.4。通过SuSE-LINUX tumblweed
1.指定目录中的某些文件与mariadb没有任何直接关系。即:我把一些提示,一个文本文件,一些备份复制在同一个指定的目录mysql mariadb的地方,这造成了无尽的错误信息,并阻止服务器启动。Mariadb似乎是非常明智的和敌对的存在与其他文件不beeing数据库文件(注解,备份,experimantal文件等)。
1.使用libreoffice作为客户端,那么在创建和处理数据库时已经产生了很多问题,并导致了一些崩溃。崩溃最终产生了坏表。
1.可能是因为这个原因,也可能是因为存在尚未删除但不可用的表!!mysql mariadb服务器崩溃了,不想做它的工作,甚至没有启动。
错误消息始终相同:“表'some.table'在引擎中不存在”
但是当它开始的时候,表格看起来很正常,但是不可能在上面工作。
那么,如果没有更准确的错误消息,该怎么办呢??无法使用的表显示:“删除”或在命令行的系统与“mysqlcheck“所以我删除了文件管理器或在系统级作为根或作为允许用户所有有问题的文件,然后问题得到解决。
建议:错误消息可以更精确一点,例如:“corrupted tables”(这可以通过mysqlcheck找到,但只有当服务器正在运行时)或通过mysqlcheck即使服务器没有运行-但这里有其他令人不安的文件,如hints/bakups a.s.o不可见。
无论如何,在备份卷上有原始数据库文件的备份副本帮助很大。这有助于一次又一次地检查和测试它,直到找到解决方案。
祝大家好运-赫伯特

t98cgbkg

t98cgbkg8#

我有旧的MySQL和Centos操作系统(版本6,我相信),这是不支持的。
有一天我无法访问Plesk。
使用Filezilla,我从var/lib/mysql/databaset/复制文件数据库文件,然后购买了一台新的服务器,安装了新的Centos 8操作系统和MariaDB。在Plesk中,我创建了一个与旧数据库同名的新数据库。
然后,我使用Filezilla将旧的数据库文件粘贴到新创建的数据库文件夹中。我可以看到phpmyadmin中的数据,但它给出了错误,如这里所描述的。我碰巧有一个旧的SQL备份转储文件。我导入了转储文件,它覆盖了那些文件。然后我将旧文件粘贴回var/lib/mysql/databasheet/,然后我不得不在Plesk中进行修复。出乎我的意料。它的工作。我有超过6个月的订单数据恢复,我没有失去任何东西。

zkure5ic

zkure5ic9#

在我的例子中,数据库是完全工作的,但是当我连接到数据库时,错误在工作台中弹出,没有任何后果。我发现,引擎中不存在的表是我从db中删除的旧表(我不再需要它了)。但不知何故,我不小心将此表的一些备份文件复制到数据库的字典中(.frm和.ibd文件)删除它们后,错误消失了。

相关问题