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

client.frm

客户端

客户

但要多出约20张桌子。

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

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

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

FRM文件是表定义。

MYD文件是存储实际数据的位置。

MYI文件是存储在表上创建的索引的位置。

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

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

这仅对于MyISAM表是正确的。 InnoDB将其表和索引存储在单个表空间*中,该表空间默认情况下由3个文件ibdata1,ib_logfile0和ib_logfile1组成。要还原数据库,您还需要这些文件。 *每表表空间是可能的,但不是默认值

他说他有.frm .myi和.myd文件。然后我以为是MyISAM表。

正确点-)

@ax是否可以在没有ibdata的情况下从InnoDB获取数据?我有一个月大的备份,并且只有当前的ib_logfile *和.frm文件。

@ax您添加了信息以使此问题更笼统,我确实复制了frm etc文件,但没有复制ibdata1 etc,这使我搜索了此问题-因此,我非常感谢您提到

答案很有价值,但为了使事情正常进行,我必须再走一步:由于我必须以root用户身份登录才能还原文件,所以运行mysqld进程的mysql用户无法访问它们。在mysql数据目录上执行chmod -R mysql:mysql .既快速又容易,但是在此之前弄清楚为什么我所有重新存储的DB似乎都没有表需要花费更长的时间。

我有与先前评论相同的问题。当我运行show tables;时,mysql显示粘贴数据库的表,但是当我运行select查询时,它返回ERROR 1146 (42S02): Table mydb.myrnd_categories doesnt exist错误。

我认为你的意思是chown而不是chmod

您可以在服务器运行时执行此操作(至少如果这些表尚不存在)。新表几乎会立即出现(再次,请注意,它仅适用于MyISAM,并且您必须对文件具有正确的权限)

要重述一些重要说明,您可能必须像这样chown复制的文件:sudo chown -R mysql:mysql varlibmysql

如@Filip Ekberg发布的答案中所述,您应该恢复权限。就我而言,在将数据库从mysql v5.5还原到mysql v5.7实例后,运行mysqlcheck --all-databases -uUSERNAME -pPASSWORD -r似乎会将字段从旧表转换为新的v 5.7格式,并且由于各种不一致而显示一些警告。

"您应该在服务器不运行时执行此操作"-如果服务器正在运行,可能会有哪些危险?

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

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

无法相信这确实适用于WordPress。

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

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

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

你救了我的命

我将自己定位为全新的mysql安装中的其他文件权限,因此我将数据库文件夹中的文件更改为640(sudo chmod -R 640 varlibmysqldatabase1),并将文件夹本身更改为750(sudo chmod 750 varlibmysqldatabase1)。

完成此操作后,出现错误:ERROR! The server quit without updating PID file

@NickManning,您好,您收到错误的哪一步?您可以启动MSQL服务器吗? PID仅与程序的过程有关,与db无关。

如果要还原文件夹,请不要忘记将文件整理到mysql:mysql chown -R mysql:mysql /var/lib/mysql-data上,否则在尝试删除数据库或添加新列等时会出现错误。

然后重启MySQL

service mysql restart

这确实不是问题的答案,但非常有帮助。

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

哇,这个工程,谢谢。

仅适用于MyISAM数据库,不适用于InnoDB

我有同样的问题,但根据上述说明未能成功恢复数据库。

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

*注意

我有一个在win7中运行的现有数据库服务器,我只需要几个数据库文件即可从恢复的文件中检索。为了从Ubuntu OS成功恢复数据库文件,我需要在win7 OS中从Ubuntu OS重新安装新版本的mysql数据库服务器,以恢复该旧数据库服务器中的所有内容。

使另一个新的mysql数据库服务器具有相同的版本

恢复的文件。

停止mysql服务器

复制恢复的文件夹并粘贴到

(C: ProgramData MySQL MySQL Server 5.5 data)mysql数据库是

存储。

复制位于linux mysql安装文件夹中的ibdata1文件,然后

粘贴到(C: ProgramData MySQL MySQL Server 5.5 data)中。完了

纠正现有问题或进行备份,然后再进行替换。

启动mysql服务器并检查您是否已成功恢复

数据库文件。

在我当前使用的mysql服务器中使用恢复的数据库

只需导出恢复的数据库并将其导入我现有的mysql

服务器。

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

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

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

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

innodb_data_home_dir="C:/MySQL Datafiles/"

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

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

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

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

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

Logo

一站式 AI 云服务平台

更多推荐