从物理文件还原MySQL数据库


139

是否可以从物理数据库文件还原MySQL数据库。我的目录具有以下文件类型:

client.frm
client.MYD
client.MYI

但要多出约20张桌子。

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


我有一个相同的问题:扩展名为FRM,MYD和MYI的多个文件。我也有文件ib_logfile0,ib_logfile1和ibdata1。我无法访问正在运行的服务器或创建转储。我尝试运行新的MySQL服务器并使用这些文件,但没有成功...有人有明确的操作方法吗?
flo5783

Answers:


132

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

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

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

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


64
这仅对于MyISAM表是正确的。InnoDB将其表和索引存储在单个表空间*中,该表空间缺省包含3个文件ibdata1,ib_logfile0和ib_logfile1。要还原数据库,您还需要这些文件。*每个表的表空间是可能的,但不会违约
斧头。

21
他说他有.frm .myi和.myd文件。然后我以为是MyISAM表。
Vincent,2009年

5
答案很有价值,但为了使事情正常进行,我必须再走一步:由于我必须以root用户身份登录才能还原文件,因此mysql运行该mysqld进程的用户无法访问它们。做一个chmod -R mysql:mysql .对MySQL数据目录是快速和容易的,但搞清楚,在此之前,为什么所有我resoterd DB中似乎没有任何表花了更长的时间。
Edurne Pascual 2012年

10
Herenvardo我认为您的意思不是chomod而不是chmod
Oliver M Grech

2
要重述一些重要说明,您可能需要chown像这样复制文件:sudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr,2016年

50

从@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/restoring-mysql-database-from-physical-files-debianubuntu/


4
+1详细的逐步说明。但是我编辑了一些陈述以真实地反映它们应该是什么。
彼得

出现#1932错误,无法访问数据。数据库出现,但是数据不可访问。在MAC OS X Mojave上运行XAMPP 7.2.12。
Steve1754a

@ Steve1754a该错误可能来自多种原因1.您是否将数据库从Mac OS移至Mac OS?2.请检查这些文件/数据/表的权限
biolinh

答案:1.是;2.我做到了。我必须完全重建数据库。无法找出解决方案。故事的寓意是:始终创建数据库的备份。我希望有一个简单的方法可以在XAMPP中自动执行此操作。
Steve1754a

1
您救了我的命
SpongePablo

8

如果要还原文件夹,请不要忘记将文件整理到mysql:mysql,

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

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

然后重启MySQL

service mysql restart

2
这实际上不是问题的答案,但很有帮助。
ryantuck '16

实际上,您不应该将所有内容都丢给mysql,mysql数据库文件夹应保留根组
Galvani

8

根据上述说明,我遇到了同样的问题,但无法成功恢复数据库。

我只能从Ubuntu OS恢复mysql数据库文件夹。我的问题是如何使用那些无法读取的mysql数据文件夹恢复数据库。因此,我切换回用于开发环境的win7 OS。

*注意:我有一个运行在win7中的现有数据库服务器,我只需要很少的数据库文件即可从恢复的文件中检索。为了从Ubuntu OS成功恢复数据库文件,我需要重新安装mysql数据库服务器(与Win7 OS中Ubuntu OS的相同版本),以恢复该旧数据库服务器中的所有内容。

  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服务器中即可。

希望这些对您有所帮助,因为没有别的方法对我有用。


1
该方法还可以在具有ibdata1,ib_logfile0和ib_logfile1文件和数据库文件夹的ubuntu / debian上使用。用户不会被复制,但是您可以将新用户添加到数据库中,然后将其转储。
bokorben

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 Service,并且一切正常。


1

是的!只需将它们添加到数据库文件夹(取决于OS),然后运行诸如“ MySQL Fix Permissions”之类的命令。这样就重新存储了数据库。也可以看到还对文件设置了正确的权限。


我做到了,但我无法识别表格。正如我在对先前答案的评论中所说的那样。
orezvani 2013年

0

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.