我每周都会倾倒我所有的桌子以获得备份。但后来我明白它只是存储表的 .frm 文件。它没有显示表格的 .MYD 和 .MYI 文件。所以我只有我的.frm 数据库文件,而且我的数据库也是innodb。那么我可以使用数据库中的数据获取我的数据库吗?
10 回答
是的,这是可能的。仅将文件复制到数据库文件夹是不够.frm
的,还需要将文件复制ib_logfiles
到ibdata
数据文件夹中。我刚刚复制了.frm
文件并复制了这些文件,然后重新启动服务器并恢复了我的数据库。
复制上述文件后执行以下命令 -
sudo chown -R mysql:mysql /var/lib/mysql
上面的命令会将mysql下的文件所有者及其文件夹更改为MySql用户。这对于mysql读取.frm
和ibdata
文件很重要。
可能对某人有用:
我只能在灾难后恢复 frm 文件,至少我可以通过执行以下操作从 FRM 文件中获取表结构:
1-在新的 mysql 数据库中创建一些具有至少一列和相同名称的虚拟表和 frm 文件。
2-stop mysql服务
3-将旧的frm文件复制并粘贴到新创建的表的frm文件中,它应该询问您是否要覆盖每个文件。全部替换。
4-启动mysql服务,你有你的表结构......
问候。任何朋友
我也在这里回答了这个问题:https ://dba.stackexchange.com/a/42932/24122
我最近遇到了同样的问题。我在 Mac 上,所以我使用 MAMP 将数据库恢复到可以将其导出到 MySQL 转储中的位置。
你可以在这里阅读完整的博客文章:http ://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on-a-Mac
你必须有:
-ibdata1
-ib_logfile0
-ib_logfile1
-.FRM 来自 mysql_database 文件夹的文件
- 全新安装您愿意销毁的 MAMP / MAMP Pro(如果需要)
- 通过 SSH 连接到您的 Web 服务器(开发、生产、没有区别)并浏览到您的 mysql 文件夹(我的文件夹位于 /var/lib/mysql 以在 Linux 上安装 Plesk)
- 压缩mysql文件夹
- 下载 mysql 文件夹的存档,该文件夹应包含所有 mySQL 数据库,无论是 MyISAM 还是 innoDB(如果需要,您可以 scp 此文件,或将其移动到可下载的目录)
- 安装 MAMP(Mac、Apache、MySQL、PHP)
- 浏览到 /Applications/MAMP/db/mysql/
- 将 /Applications/MAMP/db/mysql 备份到 zip 存档(以防万一)
从生产服务器(在我的情况下为 mt Plesk 环境)复制包含在 mysql 文件夹存档中的所有文件夹和文件,除非不要覆盖:
-/应用程序/MAMP/db/mysql/mysql/
-/应用程序/MAMP/db/mysql/mysql_upgrade_info
-/应用程序/MAMP/db/mysql/performance_schema
瞧,您现在应该可以从 phpMyAdmin 访问数据库了,真是一种解脱!
但是我们还没有完成,您现在需要执行 mysqldump 以将这些文件恢复到您的生产环境,并且 phpmyadmin 界面对于大型数据库会超时。请按照此处的步骤操作:
http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/
复制如下以供参考。请注意,在默认 MAMP 安装中,密码为“root”。
如何使用终端为 MAMP 运行 mysqldump
从 MAMP[1] 导出数据库
第一步: 打开一个新的终端窗口
第二步: 通过在终端 cd /applications/MAMP/library/bin 中输入以下行来导航到 MAMP 安装 按回车键
第三步: 编写转储命令 ./mysqldump -u [USERNAME] -p [DATA_BASENAME] > [PATH_TO_FILE] 按回车键
例子:
./mysqldump -u root -p wp_database > /Applications/MAMP/htdocs/symposium10_wp/wp_db_onezero.sql
快速提示:要快速导航到文件夹,您可以将文件夹拖到终端窗口中,它将写入文件夹的位置。有人向我展示了这一点,这是美好的一天。
第四步: 这行文字应该在你按回车键后出现 输入密码:猜猜看,输入你的密码,记住字母不会出现,但它们在那里 按回车键
第五步: 检查你存储文件的位置,如果在那里,成功 现在你可以导入数据库,这将在下面概述。
现在您已经导出了 mysql 数据库,您可以在生产环境中导入它。
我使用了mysqlfrm
一个很棒的工具,它可以从 .frm 文件生成表创建 sql 代码。尽管列出了表格,但我收到了这个讨厌的表格未找到错误。因此我使用这个工具来重新生成表格。在 ubuntu 中,您需要将其安装为:
sudo apt install mysql-utilities
然后,
mysqlfrm --diagnostic mysql/db_name/ > db_name.sql
创建一个新的数据库,然后你可以使用,
mysql -u username -p < db_name.sql
但是,这会给你表格而不是数据。就我而言,这就足够了。
是的!有可能的
很长的方法,但是您可以仅使用.frm
文件来获取所有数据。当然,您需要目录中的其他文件mysql/data
。
我的问题
有一天我的硬盘坏了,出现了开机蓝屏错误。我尝试连接多台机器,但没有成功。由于这是一个引导错误,我担心这些文件。我尝试使用辅助硬盘并尝试恢复文件夹和文件。为了以防万一,我还备份了完整的 xampp 文件夹c:/xampp
,因为我没有最近的数据库,所以我真的很担心如何检索数据库。我们在数据库中有很多客户项目管理和个人文档。
StackOverflow 评论中列出的所有方法都不起作用,至少对我来说是这样。.frm
我花了整整 2 天的时间在谷歌上搜索从文件中获取数据的答案。遇到了许多人的多种方法,但一切都令人沮丧,并且在实施时遇到了一些错误。如果他们中的大多数人都能正常工作(根据他们的评论),那么我错过了什么。
因为我太绝望了,我什至重新安装了 Windows,这导致我丢失了所有的软件并再次尝试。但仍然是同样的错误
感谢达斯汀戴维斯
我在他的博客中找到了解决方案,并设法让它以与他完全相同的方式工作。让我把功劳归功于达斯汀戴维斯(Dustin Davis)(https://dustindavis.me/restoring-mysql-innodb-files-on-windows/)。你可以从这里跳转到他的博客并尝试他的方法,非常清晰易懂。
但是我在尝试他的方法时发现了一些他没有在他的博客中解释的东西,我会尽力解释我是如何做到的以及你需要寻找什么。
完全按照这个
重要提示:确保安装相同版本的 XAMPP。您不能从旧 XAMPP 复制粘贴到新版本。这将导致__config
或__tracking
错误。
如何检查您的 XAMPP 版本
- 转到您的 xampp 文件夹(您已备份 xampp)。
- 打开
readme_en.txt
文件。它位于 xampp 的根目录中。 - 您应该在顶部看到版本。
###### ApacheFriends XAMPP Version X.X.XX ######
需要恢复的文件
xampp(old folder)/mysql/data/
ibdata1
ib_logfile0
ib_logfile1
<databasename>/*.frm
<databasename>/*.ibd
步骤1
- 安装相同版本的xampp后。
- 不要启动apache或mysql
第2步
- 转到
mysql/data
文件夹并替换,ibdata1
和ib_logfile0
ib_logfile1
database
现在将旧 xampp 备份中的文件夹复制粘贴到新安装c:/xampp/mysql/data/
的包含文件的 xampp 文件夹中.frm
,.ibd
如果您不确定尝试使用一个数据库。
第 3 步
- 去
c:/xampp/mysql/bin
寻找my.cn
。 - 打开
my.cn
文件并查找#skip-innodb
并在其下查找将其innodb_log_file_size=5M
更改为170M
.innodb_log_file_size=170M
. 这是您的日志文件大小,如果您不确定,只需将其设置为170
第4步
现在打开目录中的文件
mysql_start.bat
(Windows 批处理文件)c:/xampp/
。–innodb_force_recovery=6
后添加... --console
.... mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone --console -–innodb_force_recovery=6 if errorlevel 1 goto error goto finish
第 5 步
- 现在启动你的 Apache 和 Mysql。
- 转到您的
PHPMyAdmin
并检查您的数据库及其表。如果你没有得到任何错误,那么你就在正确的轨道上。 - 停止 Apache 和 Mysql并复制粘贴其余数据库。
我只是将数据库文件夹复制粘贴到 MySQL 中的数据文件夹中,即如果您有一个名为 alto 的数据库,那么在您的 MySQL 中找到文件夹 alto -> 在备份中的 Data 文件夹中复制整个 alto 文件夹并将其粘贴到新安装的 MySQL - > 数据文件夹,重新启动 MySQL,这很完美。
复制所有文件并替换到 /var/lib/mysql ,之后mysql
如果 mariadb.service 重启失败,您必须将文件的所有者更改为这非常重要
chown -R mysql:mysql /var/lib/mysql/*
和
chmod -R 700 /var/lib/mysql/*
经过多次试验和错误,我能够根据 user359187 答案和这篇博客文章来完成这项工作。
为了在复制文件并分配 MySQL 所有权后将旧的.frm
并.ibd
转移到新的 MySQL 数据库,我的关键是登录 MySQL 并连接到新数据库,然后让 MySQL 通过导入表空间来完成工作。
mysql> connect test;
mysql> ALTER TABLE t1 IMPORT TABLESPACE;
这将使用复制的.frm
和.ibd
文件导入数据。
我必须分别为每个表运行 Alter 命令,但这有效,我能够恢复表和数据。
在开始之前,您应该停止 WAMP 服务,或者至少在提示启动服务时重新启动这些服务。
C:\wamp\bin\mysql\mysql5.1.53\data\
默认情况下,在旧服务器实例上导航到 MySQL 数据文件夹,这应该类似于mysql5.1.53
以前安装的 MySQL 数据库的版本号。
在此文件夹中,您应该会看到一些文件和文件夹。这些文件夹是实际的 MySQL 数据库,包含一堆我们需要的 .frm 文件。您应该将文件夹名称识别为数据库名称。这些文件夹及其所有内容可以直接复制到你的 MySQL 数据文件夹中,你可以忽略默认数据库 mysql、performance_schema、test。
如果您现在启动服务器,您将看到数据库被拾取,但是数据库将不包含任何复制的表。为了获取数据库的内容,回到数据文件夹中,您应该会看到一个文件ibdata1
,这是表格的数据文件,将其直接复制到数据文件夹中,您的新数据中应该已经有一个文件名为“ibdata1”的文件夹,因此您可能希望在从旧的 MySQL 数据文件夹ibdata1.bak
复制之前将其重命名为。ibdata1
完成此操作后,重新启动所有 WAMP 服务。您可以使用 PhpMyAdmin 检查您的数据库是否已成功恢复。
创建一个具有相同名称的新数据库,将 .frm .ibd 文件复制到xampp/mysql/data/[databasename]/
您还需要 ibdata 文件,该文件位于内部
xampp/mysql/data/ 复制之前的ibdata1文件粘贴在粘贴文件中,替换成已有的ibdata文件
[注意:您可能会丢失在新 ibdata 文件中新创建的数据库内容]