从物理文件还原 MySQL 数据库

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

客户
客户,马里兰州立大学
客户 MYI

但还有20多张桌子。

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

302650 次浏览

是的!只需将它们添加到数据库文件夹(取决于操作系统)并运行一个命令,如“ MySQL 修复权限”。这将重新存储数据库。也请注意,正确的权限也设置在文件上。

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

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

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

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

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

使用 MySql 5.1(Win7)为了重新创建 DBs (InnoDbs) ,我替换了以下 dirs (my.ini params)的所有内容:

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

之后我开始使用 MySql 服务,一切都很好。

如果你正在恢复文件夹,不要忘记把文件添加到 mysql: mysql < br > < br > chown -R mysql:mysql /var/lib/mysql-data < br > < br > 否则你在删除数据库或添加新列时会出错。.

然后重启 MySQL

service mysql restart

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

我只能从我的 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 服务器

希望这些能有帮助,因为其他的都不管用。

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

步骤1. 关闭 Mysql 服务器

第二步。在数据库文件夹中复制数据库(在 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/restoring-mysql-database-from-physical-files-debianubuntu/

在我的例子中,只要删除/var/lib/mysql 中的 tc.log 就足以重新启动 mariadb/mysql。

我在试图从一个幸运的未删除的 Docker 卷中恢复一个意外删除的 Docker Container (oracleinux 的 MySQL)时碰到了这个问题,这个 Docker 卷包含物理文件中的 DB 数据。

因此,我想要做的就是将物理文件中的数据转换成一个 .sql可导入文件,以便用 DB 和数据重新创建容器。

我尝试了 生物素溶液,但在重新启动后遇到了一些 [InnoDB] Multiple files found for the same tablespace ID错误。我意识到对某些文件夹/文件进行开放性损伤手术是一个相当棘手的问题。

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

图标保持橙色,错误日志为空,直到我偶然发现我必须在新 PC 中将 my.cnf文件中的旧目录名从 wamp64替换为 wamp

来自 Biolinh 的答案

在进行了详细的步骤之后,我得到了以下错误:

Mysqlcheck: Got error: 2013: 在执行‘ REPAIR TABLE...’时,查询期间与服务器的连接丢失

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

Mysql _ security _ install

之后一切都会好起来的。