从物理文件恢复MySQL数据库

时间:2009-01-27 19:04:06

标签: mysql backup restore

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

client.frm
client.MYD
client.MYI

但是还有大约20张桌子。

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

10 个答案:

答案 0 :(得分:119)

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

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

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

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

答案 1 :(得分:29)

从@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/

上查看更多信息

答案 2 :(得分:7)

如果要恢复文件夹,请不要忘记将文件chown到mysql:mysql
chown -R mysql:mysql /var/lib/mysql-data

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

并重启MySQL

service mysql restart

答案 3 :(得分:7)

我遇到了同样的问题但是没有根据上面的说明成功恢复数据库。

我只从Ubuntu OS中恢复了mysql数据库文件夹。我的问题是如何使用那些不可读的mysql数据文件夹恢复我的数据库。现在我切换回win7 OS开发环境。

*注 我有一个在win7中运行的现有数据库服务器,我只需要很少的数据库文件来从恢复的文件中检索。要从Ubuntu OS成功恢复数据库文件,我需要在win7操作系统中从Ubuntu OS新安装新的mysql数据库服务器,以恢复旧数据库服务器中的所有内容。

  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 服务器

  7. 希望这些会有所帮助,因为我找不到解决问题的方法。

答案 4 :(得分:2)

使用MySql 5.1(Win7)。要重新创建数据库(InnoDbs),我已经替换了以下目录的所有内容(my.ini params):

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

之后我启动了MySql Service,一切正常。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

就我而言,只需删除/ var / lib / mysql中的tc.log就足以再次启动mariadb / mysql。

答案 8 :(得分:0)

我遇到了这种情况,试图从幸运的未删除的Docker卷中恢复意外删除的Docker容器(oraclelinux的MySQL),该Docker卷中包含物理文件中的DB数据。

因此,我要做的就是将数据从物理文件转换为.sql可导入文件,以使用数据库和数据重新创建容器。

我尝试了biolin's solution,但是重启后遇到了一些[InnoDB] Multiple files found for the same tablespace ID错误。我意识到,对某些文件夹/文件进行开放式手术非常棘手。

对我有用的解决方案是暂时将datadir=中的my.cnf更改为可用文件夹,然后重新启动MySQL服务器。它做得很好!

答案 9 :(得分:0)

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