155

是否可以从物理数据库文件恢复 MySQL 数据库。我有一个包含以下文件类型的目录:

客户端.frm 客户端.MYD 客户

.MYI

但是还有大约 20 张桌子。

我通常使用 mysqldump 或类似工具来获取 1 个 SQL 文件中的所有内容,那么处理这些类型的文件的方法是什么?

4

11 回答 11

143

MySQL MyISAM 表是三个文件的组合:

  • FRM 文件是表定义。
  • MYD 文件是存储实际数据的位置。
  • MYI 文件是存储在表上创建的索引的位置。

您应该可以通过将它们复制到数据库文件夹中来恢复(在 linux 中,默认位置是/var/lib/mysql/

您应该在服务器未运行时执行此操作。

于 2009-01-27T19:09:40.923 回答
63

根据@Vicent 的回答,我已经恢复了 MySQL 数据库,如下所示:

步骤 1. 关闭 Mysql 服务器

步骤 2. 将数据库复制到您的数据库文件夹中(在 linux 中,默认位置是 /var/lib/mysql)。保持数据库同名,mysql模式下数据库同名。

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

第 3 步:更改自己的文件夹并更改模式:

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

第 4 步:将 ibdata1 复制到您的数据库文件夹中

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

第 5 步:将 ib_logfile0 和 ib_logfile1 文件复制到数据库文件夹中。

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

记住更改自己的并更改这些文件的根目录:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

或者

sudo chown -R mysql:mysql /var/lib/mysql

第 6 步(可选):我的站点具有将文件存储在特定位置的配置,然后我将这些文件准确地复制到相应的位置。

第 7 步:启动您的 Mysql 服务器。一切都回来并享受它。

这就对了。

查看更多信息:https ://biolinh.wordpress.com/2017/04/01/restoreing-mysql-database-from-physical-files-debianubuntu/

于 2017-04-03T02:46:46.993 回答
12

根据上面的说明,我有同样的问题,但无法成功恢复数据库。

我只能从我的 Ubuntu 操作系统中恢复 mysql 数据库文件夹。我的问题是如何使用那些不可读的 mysql 数据文件夹恢复我的数据库。所以我切换回win7操作系统作为开发环境。

*注意我有一个在 win7 中运行的现有数据库服务器,我只需要几个数据库文件即可从恢复的文件中检索。要从 Ubuntu 操作系统成功恢复数据库文件,我需要全新安装 mysql 数据库服务器(与我的 win7 操作系统中的 Ubuntu 操作系统版本相同)以恢复旧数据库服务器中的所有内容。

  1. 从恢复的文件中创建另一个新的 mysql 数据库服务器相同的版本。

  2. 停止mysql服务器

  3. 复制恢复的文件夹并粘贴到存储的 (C:\ProgramData\MySQL\MySQL Server 5.5\data) mysql 数据库中。

  4. 复制位于 linux mysql 安装文件夹中的 ibdata1 文件并将其粘贴到 (C:\ProgramData\MySQL\MySQL Server 5.5\data)。只需覆盖现有的或在替换之前进行备份。

  5. 启动 mysql 服务器并检查您是否已成功恢复数据库文件。

  6. 要在我当前使用的 mysql 服务器中使用恢复的数据库,只需导出恢复的数据库并将其导入我现有的 mysql 服务器。

希望这些会有所帮助,因为没有其他东西对我有用。

于 2015-02-27T10:08:17.593 回答
10

如果您正在恢复文件夹,请不要忘记将文件 chown 到 mysql:mysql

chown -R mysql:mysql /var/lib/mysql-data

否则在尝试删除数据库或添加新列等时会出错。

并重新启动 MySQL

service mysql restart
于 2014-06-29T12:41:33.317 回答
2

使用 MySql 5.1 (Win7)。为了重新创建数据库(InnoDbs),我替换了以下目录(my.ini 参数)的所有内容:

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

之后我启动了 MySql 服务,一切正常。

于 2012-03-01T11:19:23.650 回答
1

是的!只需将它们添加到您的数据库文件夹(取决于操作系统)并运行诸如“MySQL Fix Permissions”之类的命令。这重新存储了数据库。还可以看到在文件上设置了正确的权限。

于 2009-01-27T19:05:58.717 回答
1

我试图从一个幸运地未删除的 docker 卷中恢复一个意外删除的 Docker 容器(oraclelinux 的 MySQL),该卷中包含物理文件中的数据库数据。

因此,我想做的就是将物理文件中的数据转换为.sql可导入文件,以使用数据库和数据重新创建容器。

我尝试了 biolin 的解决方案,但在重新启动后遇到了一些[InnoDB] Multiple files found for the same tablespace ID错误。我意识到对某些文件夹/文件进行开放性损伤手术非常棘手。

对我有用的解决方案是暂时将datadir=in更改my.cnf为可用文件夹并重新启动 MySQL 服务器。它完美地完成了这项工作!

于 2020-08-20T12:06:13.303 回答
0

我曾经将这些文件复制到正在运行的 mysql 数据库的数据库存储文件夹中,启动 db 并等待它“修复”文件,然后使用 mysqldump 提取它们。

于 2009-01-27T19:07:52.533 回答
0

就我而言,只需删除 /var/lib/mysql 中的 tc.log 就足以再次启动 mariadb/mysql。

于 2019-02-08T15:19:14.350 回答
0

my.cnf该图标保持橙色,错误日志为空,直到我意外发现我必须将文件中的名称从旧目录名称替换/更新wamp64wamp新 PC 中。

于 2021-03-07T00:29:44.677 回答
0

来自Biolinh的回答

做了详细的程序后,我得到了以下错误:

mysqlcheck:得到错误:2013:执行“修复表...”时查询期间丢失与服务器的连接

然后我还从备份中复制了 /var/lib/mysql/mysql 目录并运行了命令:

mysql_secure_installation

之后一切正常。

于 2022-02-27T00:50:37.857 回答