从昨天开始我就无法运行我的 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 文件,这样做时遇到了问题。
- 首先我停止了 mysql(我使用 XAMPP 在本地运行它)
- 接下来我打开了我的配置文件文件位于/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"
- 在新版本的 XAMPP 中我想要开始使用:
- 在/xampp/mysql/我改名了数据到数据_旧
- 然后仍然在同一个目录中/xampp/mysql/我复制了数据来自我的旧 XAMPP 的目录。
- 然后我启动了我的 mysql 服务器,一切正常
希望这对某人有帮助!
答案3
这是我在 Windows 10 上使用 MySQL 5.7 所做的操作
两个安装都是使用 MySQL Installer 完成的,因此设置相同,但与其他答案中描述的设置略有不同。
基本上,我只从原始安装文件夹中复制了以我感兴趣的模式命名的文件夹。接下来,要应用的基本设置位于文件夹属性对话框的“安全”选项卡中:
- 将主数据文件夹及其所有子文件夹(包括刚刚复制的文件夹)的所有权分配给该
SYSTEM
账户(而不是管理员、管理员或任何用于进行复制的用户); NETWORK SERVICE
向具有该文件夹完全控制权的用户添加。
我在 MySQL 论坛上找到了这些说明,以下是原始消息:
Ray Yates 的原创完整说明:
为了后代:
我右键单击了 C:...\Data\ 文件夹并选择“属性”->“安全 - 高级”,然后看到名为 NETWORK SERVICE 的主体
在单独的窗口中,我右键单击了复制的 E:\MYSQL\Data\ 文件夹,发现没有这样的设置。
我单击[添加]按钮,然后单击“选择主体”链接并输入对象名称“NETWORK SERVICE”,然后单击[确定]
我选择了网络服务并单击[编辑]并选中完全控制[确定]
然后我重复了所有原始步骤,服务器按预期启动。