从物理文件恢复MySQL数据库

从物理文件恢复MySQL数据库,mysql,backup,restore,Mysql,Backup,Restore,是否可以从物理数据库文件恢复MySQL数据库。我有一个具有以下文件类型的目录: client.frm client.MYD client.MYI 但要再多20张桌子 我通常使用mysqldump或类似的工具来获取1个SQL文件中的所有内容,那么如何处理这些类型的文件呢?是的!只需将它们添加到数据库文件夹(取决于操作系统),并运行诸如“MySQL Fix Permissions”之类的命令。这将重新存储数据库。也要确保对文件设置了正确的权限。我曾经将这些文件复制到mysql数据库的数据库存储文件夹

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

client.frm
client.MYD
client.MYI

但要再多20张桌子


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

是的!只需将它们添加到数据库文件夹(取决于操作系统),并运行诸如“MySQL Fix Permissions”之类的命令。这将重新存储数据库。也要确保对文件设置了正确的权限。

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

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

  • FRM文件是表定义
  • MYD文件是存储实际数据的地方
  • MYI文件是存储表上创建的索引的地方
您应该能够通过将它们复制到数据库文件夹中进行恢复(在linux中,默认位置是
/var/lib/mysql/

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

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


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

如果要恢复文件夹,请不要忘记将文件chown-R MySql:MySql

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


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

然后重新启动MySQL

service mysql restart

我也有同样的问题,但根据上面的说明,无法成功恢复数据库

我只能从我的Ubuntu操作系统中恢复mysql数据库文件夹。我的问题是如何用那些不可读的mysql数据文件夹恢复我的数据库。所以我切换回win7操作系统作为开发环境

*注 我有一个在win7中运行的现有数据库服务器,我只需要几个数据库文件就可以从恢复的文件中检索。为了成功地从Ubuntu操作系统恢复数据库文件,我需要新安装mysql数据库服务器(与我的win7操作系统中的Ubuntu操作系统版本相同),以恢复旧数据库服务器中的所有内容

  • 从中创建另一个新的mysql数据库服务器 恢复的文件

  • 停止mysql服务器

  • 复制恢复的文件夹并粘贴到 (C:\ProgramData\MySQL\MySQL Server 5.5\data)MySQL数据库是 储存的

  • 复制位于linux mysql安装文件夹中的ibdata1文件,然后 粘贴到(C:\ProgramData\MySQL\MySQL服务器5.5\data)。只需在替换之前覆盖现有或进行备份

  • 启动mysql服务器并检查是否已成功恢复 数据库文件

  • 在我当前使用的mysql服务器中使用恢复的数据库 只需导出恢复的数据库并将其导入现有的mysql即可 服务器


  • 希望这些对我有帮助,因为没有其他东西对我有用

    根据@Vicent的回答,我已经恢复了MySQL数据库,如下所示:

    第一步。关闭Mysql服务器

    第二步。在数据库文件夹中复制数据库(在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
    

    步骤6(可选):我的站点配置为将文件存储在特定位置,然后我将这些文件复制到相应的位置

    步骤7:启动Mysql服务器。一切都会回来享受它

    就是这样


    查看更多信息:

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

    我在尝试从一个幸运的未删除的Docker卷中恢复意外删除的Docker容器(oraclelinux的mysql)时遇到了这个问题,该Docker卷的物理文件中包含DB数据

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

    我尝试过,但在重新启动后遇到了一些针对相同表空间ID的多个文件。我意识到在某些文件夹/文件上做开放式伤害手术是相当棘手的


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

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

    这仅适用于MyISAM表。InnoDB将其表和索引存储在一个表空间*,默认情况下,该表空间由3个文件ibdata1、ib_logfile0和ib_logfile1组成。要恢复数据库,还需要这些文件。*每个表的表空间是可能的,但不是默认的,他说他有.frm.myi和.myd文件。然后,我假设这是MyISAM tables。这是一个很有价值的答案,但为了让事情顺利进行,我必须更进一步:因为我必须以root用户身份登录才能还原文件,所以运行
    mysqld
    进程的
    mysql
    用户无法访问它们。在mysql数据目录上执行
    chmod-R mysql:mysql.
    操作既快又简单,但在此之前,要弄清楚为什么我所有的resoterd数据库似乎都没有表需要更长的时间。在这里,我想你的意思是chown而不是chmod要重述一些重要的注释,你可能必须
    chown
    cop
    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