从物理文件恢复 MySQL 数据库
Posted
技术标签:
【中文标题】从物理文件恢复 MySQL 数据库【英文标题】:Restoring MySQL database from physical files 【发布时间】:2010-10-03 20:10:33 【问题描述】:是否可以从物理数据库文件中恢复 mysql 数据库。我有一个包含以下文件类型的目录:
client.frm 客户.MYD 客户.MYI
但还有大约 20 张桌子。
我通常使用 mysqldump 或类似的工具来获取 1 个 SQL 文件中的所有内容,那么处理这些类型的文件的方法是什么?
【问题讨论】:
我有同样的问题:多个文件扩展名为 FRM、MYD 和 MYI。我还有文件 ib_logfile0、ib_logfile1 和 ibdata1。我无法访问正在运行的服务器或创建转储。我尝试运行一个新的 MySQL 服务器并使用这些文件,但我没有成功......有人有明确的操作方法吗? 【参考方案1】:是的!只需将它们添加到您的数据库文件夹(取决于操作系统)并运行诸如“MySQL Fix Permissions”之类的命令。这重新存储了数据库。还可以看到文件上设置了正确的权限。
【讨论】:
我做到了,但它无法识别表格。正如我在对先前答案的评论中所说的那样。【参考方案2】:我曾经将这些文件复制到正在运行的 mysql 数据库的数据库存储文件夹中,启动 db 并等待它“修复”文件,然后使用 mysqldump 提取它们。
【讨论】:
【参考方案3】:一个 MySQL MyISAM 表是三个文件的组合:
FRM 文件是表定义。 MYD 文件是存储实际数据的位置。 MYI 文件是存储在表上创建的索引的位置。您应该可以通过将它们复制到数据库文件夹中来恢复(在 linux 中,默认位置是 /var/lib/mysql/
)
您应该在服务器未运行时执行此操作。
【讨论】:
这仅适用于 MyISAM 表。 InnoDB 将其表和索引存储在单个表空间 * 中,默认情况下由 3 个文件 ibdata1、ib_logfile0 和 ib_logfile1 组成。要恢复数据库,您还需要这些文件。 * 每个表的表空间是可能的,但不是默认的 他说他有 .frm .myi 和 .myd 文件。然后我假设它是 MyISAM 表。 有价值的答案,但我必须更进一步才能正常工作:因为我必须以 root 身份登录才能恢复文件,所以运行mysqld
进程的 mysql
用户无法不要访问它们。在 mysql 数据目录上执行chmod -R mysql:mysql .
既快速又简单,但在此之前弄清楚为什么我的所有重新排序的数据库似乎都没有表需要更长的时间。
herenvardo 我想你的意思是 chown 不是 chmod
要回顾一些重要的注意事项,您可能需要chown
复制的文件,如下所示:sudo chown -R mysql:mysql /var/lib/mysql
【参考方案4】:
使用 MySql 5.1 (Win7)。为了重新创建数据库(InnoDbs),我替换了以下目录(my.ini 参数)的所有内容:
datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"
之后我启动了 MySql 服务,一切正常。
【讨论】:
【参考方案5】:如果您要恢复文件夹,请不要忘记将文件 chown 到 mysql:mysql chown -R mysql:mysql /var/lib/mysql-data
否则在尝试删除数据库或添加新数据库时会出错列等。
然后重启 MySQL
service mysql restart
【讨论】:
这不是问题的真正答案,但非常有帮助。 其实你不应该把所有东西都chown到mysql,mysql数据库文件夹应该保留根组【参考方案6】:我遇到了同样的问题,但根据上述说明无法成功恢复数据库。
我只能从我的 Ubuntu 操作系统中恢复 mysql 数据库文件夹。我的问题是如何使用那些不可读的 mysql 数据文件夹恢复我的数据库。所以我切换回win7操作系统作为开发环境。
*注意 我有一个在 win7 中运行的现有数据库服务器,我只需要几个数据库文件即可从恢复的文件中检索。要从 Ubuntu 操作系统成功恢复数据库文件,我需要全新安装 mysql 数据库服务器(与我的 win7 操作系统中的 Ubuntu 操作系统版本相同)以恢复旧数据库服务器中的所有内容。
从 恢复的文件。
停止 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。用户不会被复制,但是您可以将新用户添加到数据库中并将其转储。【参考方案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 了解详细的分步说明。但我编辑了一些陈述以真正反映它们应该是什么。 遇到 #1932 错误,无法访问数据。出现数据库,但无法访问数据。在 MAC OS X Mojave 上运行 XAMPP 7.2.12。 @Steve1754a 该错误可能有多种原因 1. 您是否将数据库从 Mac OS 移动到 Mac OS? 2.请检查那些文件/数据/表的权限 你救了我的命 实际上复制(压缩/解压缩)整个var/lib/mysql
文件夹对我来说效果更好。为简单起见:sudo chown -R mysql:mysql /var/lib/mysql
和 sudo chmod -R 760 /var/lib/mysql/
【参考方案8】:
在我的情况下,只需删除 /var/lib/mysql 中的 tc.log 就足以再次启动 mariadb/mysql。
【讨论】:
这不是能够启动/重启mysql服务器的问题。【参考方案9】:我在尝试从物理文件中包含数据库数据的幸运未删除的 docker 卷中恢复意外删除的 Docker 容器(oraclelinux 的 MySQL)时遇到了这种情况。
所以,我想做的就是将物理文件中的数据转换为.sql
可导入文件,以使用数据库和数据重新创建容器。
我尝试了biolin's solution,但在重启后遇到了一些[InnoDB] Multiple files found for the same tablespace ID
错误。我意识到对某些文件夹/文件进行开放性损伤手术非常棘手。
对我有用的解决方案是将my.cnf
中的datadir=
临时更改为可用文件夹并重新启动MySQL 服务器。它完美地完成了这项工作!
【讨论】:
【参考方案10】:该图标保持橙色,错误日志为空,直到我意外发现我必须将 my.cnf
文件中的名称从旧目录名称 wamp64
替换/更新为新 PC 中的 wamp
。
【讨论】:
以上是关于从物理文件恢复 MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章