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

Vyl*_*lix 8 mysql

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

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

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

如何正确恢复我的数据库?

我正在使用 MySQL 4.1 和 Windows 7。

Vom*_*yle 7

\n

在 Windows 上恢复 MySQL InnoDB 文件

\n\n

InnoDB 类型文件是一项更困难的任务,这就是我写这篇文章的原因。我很难找到如何做到这一点,但我拼凑了足够的信息来完成任务。现在,为了回馈社会,我\xe2\x80\x99将准确解释我是如何恢复它的。

\n\n

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

\n\n
\\MySQL\\MySQL Server 4.1\\data\\ibdata1\n\\MySQL\\MySQL Server 4.1\\data\\ib_logfile0\n\\MySQL\\MySQL Server 4.1\\data\\ib_logfile1\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,在数据文件夹中有一个文件夹,其名称为我正在恢复的数据库的名称*.frm\n(table_name.frm )。

\n\n

我在我的开发机器上而不是实际的服务器上进行了恢复,因为我不想破坏服务器上正在运行的内容。我已经通过 XAMPP 安装安装了 MySQL。(我的\n 开发盒运行的是 Windows XP SP2)。XAMPP 安装 MySQL 与常规 MySQL 安装略有不同,因此如果遵循我在这里所做的操作有帮助,您可能需要安装它。

\n\n

我首先使用 XAMPP\xe2\x80\x99s 控制面板停止了 MySQL 服务。

\n\n

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

\n\n

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

\n\n

老的:

\n\n
skip-innodb\n#innodb_data_home_dir = C:/Program Files/xampp/mysql/data/\n#innodb_data_file_path = ibdata1:10M:autoextend\n#innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/\n#innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/\n#set-variable = innodb_buffer_pool_size=16M\n#set-variable = innodb_additional_mem_pool_size=2M\n#set-variable = innodb_log_file_size=5M\n#set-variable = innodb_log_buffer_size=8M\n#innodb_flush_log_at_trx_commit=1\n#set-variable = innodb_lock_wait_timeout=5\n
Run Code Online (Sandbox Code Playgroud)\n\n

新的:

\n\n
#skip-innodb\ninnodb_data_home_dir = C:/Program Files/xampp/mysql/data/\ninnodb_data_file_path = ibdata1:10M:autoextend\ninnodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/\ninnodb_log_arch_dir = C:/Program Files/xampp/mysql/data/\nset-variable = innodb_buffer_pool_size=16M\nset-variable = innodb_additional_mem_pool_size=2M\nset-variable = innodb_log_file_size=170M\nset-variable = innodb_log_buffer_size=8M\ninnodb_flush_log_at_trx_commit=1\nset-variable = innodb_lock_wait_timeout=50\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

然后我编辑了启动 mysql 服务的 XAMPP 批处理文件\n ( C:\\Program Files\\xampp\\mysql_start.bat)。我 \xe2\x80\x93innodb_force_recovery=6在 mysqld 调用的末尾添加了\n。所以该文件的第 8\n 行现在为:

\n\n
mysql\\bin\\mysqld \xe2\x80\x93defaults-file=mysql\\bin\\my.cnf \xe2\x80\x93standalone \xe2\x80\x93console \xe2\x80\x93innodb_force_recovery=6\n
Run Code Online (Sandbox Code Playgroud)\n\n

这招成功了!我的数据库已在我的计算机上恢复。我使用 SQLyog对数据库进行 SQL 转储,以将其恢复到我们的生产服务器上。

\n\n

来源

\n
\n\n
\n\n

更多资源

\n\n\n