我有一个用 Java Spring 开发的系统,它将数据存储在 Windows 10 上本地运行的 MySQL 数据库中。
昨天,我运行了最新的 Windows 更新,经过 2 小时的磨合后,我的电脑崩溃了……从那时起,Windows 就无法启动,并让我选择重新安装 Windows,同时可以保留我的个人数据。但是,我认为它会删除 MySQL 和所有存储的数据。
我在同一台机器上运行着 Linux,因此我尝试使用 Linux 访问数据库,以便使用 mysqldump 进行备份。
为了做到这一点,我尝试使用以下命令将 Windows 上保存数据的目录挂载到 Linux 目录:
sudo mount --bind '/media/guillaume/Windows/ProgramData/MySQL/MySQL Server 5.7/Data' /var/lib/mysql
然后我重启了 mysql 服务器,并打开了 SQL 控制台。我可以使用 Windows 密码(它与 Linux 上的 SQL 密码不同)登录到 SQL 控制台,并且可以列出我的 Windows 机器上保存的所有数据库。
这时情况就变得更加复杂了。SQL 控制台可以列出数据库中我感兴趣的所有表,但出于某种原因,它无法查询表的内容。我可以列出所有表,但无法查询表。SQL 告诉我这样的表不存在,即使它刚刚列出了它。
我有这个的截图,没有错别字,但是该网站不允许我发布图片......
我该如何解决这个问题?或者有没有更聪明的方法从 windows 位置创建转储,即使 windows 未启动?
感谢您的帮助 !
答案1
它不起作用的原因是我已将 Windows 中的数据库重命名为“database_W”,以便将其与 Linux 中具有相同名称的其他数据库区分开来,并且该数据库是我从两周前进行的备份中恢复的。
我已将 Windows ProgramData 文件复制到外部磁盘,因此我将数据库的备份复制到目标文件夹中,然后 SQL 控制台以及我的 IDE 可以看到这个原始数据库、其所有表和所有数据。我使用我的 IDE 创建了一个备份文件(转储)。
正如 Rinzwind 指出的那样,定期备份数据至关重要,尤其是在 Windows 更新之前......吸取教训!
因此,我恢复数据的步骤如下:
- 使用Linux访问Windows数据,并备份所有数据
- 要恢复 SQL 数据,您需要对以下位置感兴趣:
'/media/guillaume/Windows/ProgramData/MySQL/MySQL Server 5.7/Data'
。请勿更改其中的任何名称! - 使用以下命令将您的 Windows ProgramData 文件挂载到适当的 Linux 目录:
sudo mount --bind '/media/guillaume/Windows/ProgramData/MySQL/MySQL Server 5.7/Data' /var/lib/mysql
- 重新启动你的 sql 服务(我使用了这个命令:service mysql restart)
- 使用 Linux 终端中的 SQL 控制台检查您是否可以从 Linux 看到 Windows 数据库并且是否可以访问数据(使用 select * from table 类型的语句);
- 使用您的 IDE 连接到该数据库(使用 Windows 凭据)以便从 IDE 创建转储文件。