如何使用数据文件夹中的文件恢复 mysql 数据库?

如何使用数据文件夹中的文件恢复 mysql 数据库?

从昨天开始我就无法运行我的 mysql,也无法访问它,所以我决定重新安装它。我已经备份了数据文件夹,我推测其中包含了重新安装 mysql 后恢复数据库所需的所有内容。

我已经复制粘贴并用备份覆盖了旧数据文件夹,但是它会引发错误,从而阻止 mysql 加载。

我只复制粘贴了与我的数据库同名的文件夹(假设我的数据库),并且运行正常,但无法加载数据库本身。当我尝试使用 SQLyog 访问数据库时,每个表都会抛出“无法打开文件表名.ibd

我怎样才能正确恢复我的数据库?

我正在使用 MySQL 4.1 和 Windows 7。

答案1

在 Windows 上恢复 MySQL InnoDB 文件

InnoDB 类型的文件是一项更困难的任务,这就是我写这篇文章的原因。我费了好大劲才找到方法,但我拼凑了足够的信息来完成这项任务。现在,为了回馈大家,我将详细解释我是如何恢复它的。

在我们的备份中,我们有以下文件:

\MySQL\MySQL Server 4.1\data\ibdata1
\MySQL\MySQL Server 4.1\data\ib_logfile0
\MySQL\MySQL Server 4.1\data\ib_logfile1

另外,在数据文件夹中有一个文件夹,其名称与我正在恢复的包含*.frm文件的数据库相同(table_name.frm)。

我在我的开发机器上而不是实际服务器上进行了恢复,因为我不想搞砸服务器上的工作。我已经从 XAMPP 安装中安装了 MySQL。(我的开发机运行的是 Windows XP SP2)。XAMPP 安装 MySQL 的方式与常规 MySQL 安装略有不同,因此如果按照我在这里所做的操作有帮助,您可能需要安装它。

我首先使用 XAMPP 的控制面板停止了我的 MySQL 服务。

我将上面列出的文件(ib*文件和包含文件的文件夹*.frm)移动到了我的本地 mysql 数据文件夹(C:\Program Files\xampp\mysql\data)。

然后我编辑了my.cnf(位于C:\Program Files\xampp\mysql\bin)并做了以下更改(对我来说从第 66 行开始):

老的:

skip-innodb
#innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=5

新的:

#skip-innodb
innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M
set-variable = innodb_log_file_size=170M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50

(我必须将 innodb_log_file_size 设置为我的日志文件的实际大小)

然后,我编辑了启动 mysql 服务的 XAMPP 批处理文件 ( C:\Program Files\xampp\mysql_start.bat)。我 –innodb_force_recovery=6在对 mysqld 的调用末尾添加了以下内容。因此该文件的第 8 行现在显示为:

mysql\bin\mysqld –defaults-file=mysql\bin\my.cnf –standalone –console –innodb_force_recovery=6

这招奏效了!我的数据库在我的机器上恢复了。我用 SQLyog对数据库进行 SQL 转储以便在生产服务器上恢复它。

来源


更多资源

答案2

投票赞成并感谢皮条客果汁 IT很棒的答案。在他的回答的帮助下,我确实解决了类似的问题,但略有不同,所以我想分享一下。

我更新了 XAMPP 的最新版本。我没有使用安装程序,而是将其下载为新的 zip 文件,这样做时遇到了问题。

  1. 首先我停止了 mysql(我使用 XAMPP 在本地运行它)
  2. 接下来我打开了我的配置文件文件位于/xampp/mysql/bin/文件——我的更改从#skip-innoodb(第 136 行) 开始。您的行号可能有所不同。

这是我最初发现的:

#... omitted lines above ...
#skip-innodb
innodb_data_home_dir = "/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "/xampp/mysql/data"
#innodb_log_arch_dir = "/xampp/mysql/data"
#... omitted lines below ...

这里的问题似乎是相对路径;请注意C:上面目录的缺失。将路径设为绝对路径是我的第一步。

#skip-innodb
innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"
#innodb_log_arch_dir = "C:/xampp/mysql/data"
  1. 在新版本的 XAMPP 中我想要开始使用:
    • /xampp/mysql/我改名了数据数据_旧
    • 然后仍然在同一个目录中/xampp/mysql/我复制了数据来自我的旧 XAMPP 的目录。
  2. 然后我启动了我的 mysql 服务器,一切正常

希望这对某人有帮助!

答案3

这是我在 Windows 10 上使用 MySQL 5.7 所做的操作

两个安装都是使用 MySQL Installer 完成的,因此设置相同,但与其他答案中描述的设置略有不同。

基本上,我只从原始安装文件夹中复制了以我感兴趣的模式命名的文件夹。接下来,要应用的基本设置位于文件夹属性对话框的“安全”选项卡中:

  • 将主数据文件夹及其所有子文件夹(包括刚刚复制的文件夹)的所有权分配给该SYSTEM账户(而不是管理员、管理员或任何用于进行复制的用户);
  • NETWORK SERVICE向具有该文件夹完全控制权的用户添加。

我在 MySQL 论坛上找到了这些说明,以下是原始消息:

Ray Yates 的原创完整说明:

为了后代:

  1. 我右键单击了 C:...\Data\ 文件夹并选择“属性”->“安全 - 高级”,然后看到名为 NETWORK SERVICE 的主体

  2. 在单独的窗口中,我右键单击了复制的 E:\MYSQL\Data\ 文件夹,发现没有这样的设置。

  3. 我单击[添加]按钮,然后单击“选择主体”链接并输入对象名称“NETWORK SERVICE”,然后单击[确定]

  4. 我选择了网络服务并单击[编辑]并选中完全控制[确定]

  5. 然后我重复了所有原始步骤,服务器按预期启动。

相关内容