从磁盘映像恢复 MySQL 备份

从磁盘映像恢复 MySQL 备份

我最近搞错了一个查询,导致 MySQL 中的一个表被删除。我还意识到我没有一个 cron 来执行夜间 SQL 转储。但我有一个夜间磁盘映像,我已将其恢复并安装在数据库服务器上。

我在 ~/my_restore/var/lib/mysql 中发现了一个巨大的“ibdata1”文件,听起来它可能是我的数据库。

是否有一个命令可以运行来直接从数据库文件中进行转储?

或者也许我应该停止 mysql 并更新 /etc/mysql/my.cnf 以指向新的数据文件?

在我把愚蠢变得更愚蠢之前,我只是想得到一些建议。

答案1

首先,获取正在运行的 mysql 服务器的磁盘映像几乎肯定会导致备份损坏。这是一个糟糕的备份策略,您应该尽快纠正。Mysqldump 是首选工具,其次是停止 mysql 服务器。

无论如何,如果我处于您的位置并且可以承受一些停机时间,我会遵循以下步骤。

  • 使用支持的方法对当前数据库进行备份(不想在修复过程中使情况变得更糟)。
  • 停止 Mysql 服务器
  • 将 mysql 数据目录重命名为某个临时位置(mv /var/lib/mysql /var/lib/mysql_production)
  • 尝试将磁盘映像中的数据恢复到 /var/lib/mysql
  • 启动mysql服务器并查看错误
  • 对“恢复的”数据进行备份/导出。
  • 切换回生产数据库
    • 停止服务器
    • git 删除恢复的 /var/lib/mysql
    • 将 /var/lib/mysql_production 移回 /var/lib/mysql
    • 启动 mysql 服务器
  • 从您导出的恢复数据中选择性地恢复单个表/数据/等等。

答案2

备份 MySQL 的最佳方法是通过 导出 MySQL 数据mysqldump。在运行时拍摄整个服务器的映像只会导致服务器可能损坏。

因此,我建议如下。

  1. 恢复您拥有的图像。
  2. 一旦恢复,请登录并mysqldump在有问题的数据库上运行。
  3. 将导出的 MySQL 文件重新导入到您的工作设置中。

相关内容