我重新格式化了我的 PC,并重新安装了 xampp,但从未覆盖 mysql 文件夹(xampp 安装中的选项),也没有备份我的数据库表,以为这是安全的!(我在想什么?)
现在,Myphpmyadmin 显示存在表 - mydatabase(294)!但是当单击显示 mydatabase(0) 表时 - 未找到表!!! 运行我的 drupal 网站时出现以下信息:
DOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mydrupaldatabase.semaphore' doesn't exist: SELECT expire, value FROM {semaphore} WHERE name = :name; Array ( [:name] => variable_init ) in lock_may_be_available() (line 167 of F:\xampp\htdocs\mydrupalsite\includes\lock.inc)....
在我的 mysql/data/mydrupaldatabase/ 文件夹中,我可以看到我的数据库的所有 *.frm 文件。但我不确定这些是否是实际数据,因为只有大约 2mb 的数据,而实际上我记得我的数据应该有大约 4mb。
我强烈认为我的数据仍然存在,但 phpmyadmin 可能只是不知道如何恢复它。
非常感谢您的帮助!
答案1
datadir
首先,使用以下命令验证您是否具有正确信息:
SHOW VARIABLES LIKE 'datadir';
这将为您提供一个包含更多基于数据库名称的目录的目录。在每个目录中,您应该看到三种类型的文件:
.frm
包含表定义,但不包含实际数据。.myd
包含原始表数据。(MyISAM).myi
包含您定义的任何表索引。(MyISAM).ibd
包含组合格式的索引和数据。(InnoDB)
这就是棘手的地方。InnoDB(您在评论中提到您正在使用)具有表空间的概念,与 Oracle 非常相似。也就是说,如果您已将其配置为这样做,它会将系统上的文件分离到不同的命名空间中;否则,它会将所有内容存储在系统表空间。它通常位于名为的文件中ibdata#
,其中的数字可能会发生变化。如果该文件消失了,那么您的数据就消失了。很可能您重新安装 MySQL 时备份了该文件并将其放入标准系统文件中——但您需要查看一下。
供将来参考,您能基于每个文件创建这些表,这样你就可以使用表 1. innodb_file_per_table配置选项。