我有一個用 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 中具有相同名稱的其他資料庫區分開來,並且我已從我執行的備份中恢復了 2幾週前。
我已將 Windows ProgramData 檔案複製到外部磁碟,因此我將資料庫的備份複製到我的目標資料夾中,然後 SQL 控制台以及我的 IDE 可以看到這個原始資料庫、其所有資料表和所有資料。我使用 IDE 建立了一個備份檔 (dump)。
正如 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 建立轉儲檔案。