如何使用資料資料夾中的檔案恢復mysql資料庫?

如何使用資料資料夾中的檔案恢復mysql資料庫?

從昨天開始我就無法運行我的mysql,也無法存取它,所以我決定重新安裝它。我已經備份了資料資料夾,我認為它包含了我重新安裝 mysql 後恢復資料庫所需的所有內容。

我已經複製貼上並用備份覆蓋舊資料資料夾,但它會拋出錯誤,導致 mysql 無法加載。

我只複製貼上了與我的資料庫同名的資料夾(假設我的資料庫),它運行得很好,但資料庫本身無法加載。當我嘗試使用 SQLyog 存取資料庫時,每個表都會拋出「無法開啟文件表名.ibd

如何正確恢復我的資料庫?

我使用的是 MySQL 4.1 和 Windows 7。

答案1

在 Windows 上還原 MySQL InnoDB 文件

InnoDB 類型檔案是一項更困難的任務,這就是我寫這篇文章的原因。我很難找到如何做,但我拼湊了足夠的資訊來完成任務。現在,為了回饋社會,我將準確地解釋我為恢復它所做的事情。

在我們的備份中,我們有以下文件:

\MySQL\MySQL Server 4.1\data\ibdata1
\MySQL\MySQL Server 4.1\data\ib_logfile0
\MySQL\MySQL Server 4.1\data\ib_logfile1

另外,在資料資料夾中,有一個資料夾的名稱是我要復原的資料庫的名稱,其中包含*.frm檔案 ( table_name.frm)。

我在我的開發機器上而不是實際的伺服器上進行了恢復,因為我不想搞砸伺服器上正在運行的內容。我已經透過 XAMPP 安裝安裝了 MySQL。 (我的開發盒運行的是Windows XP SP2)。 XAMPP 安裝 MySQL 與常規 MySQL 安裝略有不同,因此如果遵循我在這裡所做的操作有幫助,您可能需要安裝它。

我首先使用 XAMPP 的控制面板停止了 MySQL 服務。

我將上面列出的文件(ib*文件和包含文件的資料夾*.frm)移到我的本機 mysql 資料夾 ( C:\Program Files\xampp\mysql\data)。

然後我進行了編輯my.cnf(位於C:\Program Files\xampp\mysql\bin)並進行了以下更改(對我來說從第 66 行開始):

老的:

skip-innodb
#innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=5

新的:

#skip-innodb
innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M
set-variable = innodb_log_file_size=170M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50

(我必須將 innodb_log_file_size 設定為日誌檔案的實際大小)

然後我編輯了啟動 mysql 服務的 XAMPP 批次檔 ( C:\Program Files\xampp\mysql_start.bat)。我添加 –innodb_force_recovery=6到 mysqld 呼叫的末尾。所以該文件的第 8 行現在是:

mysql\bin\mysqld –defaults-file=mysql\bin\my.cnf –standalone –console –innodb_force_recovery=6

這招成功了!我的資料庫已在我的電腦上恢復。我用了 SQLyog對資料庫進行 sql 轉儲以將其還原到我們的生產伺服器上。

來源


更多資源

答案2

投票並感謝皮條客果汁 IT一個很好的答案。我確實在他的回答的幫助下解決了類似的問題,但有點不同,所以我想我會分享。

我更新到了更新版本的 XAMPP。我不使用安裝程序,只是將其下載為新的 zip 文件,但這樣做時遇到了問題。

  1. 首先我停止了mysql(我使用XAMPP在本地運行它)
  2. 接下來我打開了我的.ini文件位於/xampp/mysql/bin/文件-對我來說,我的更改是從#skip-innoodb(第 136 行)開始的。您的行號可能會有所不同。

這是我最初發現的:

#... omitted lines above ...
#skip-innodb
innodb_data_home_dir = "/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "/xampp/mysql/data"
#innodb_log_arch_dir = "/xampp/mysql/data"
#... omitted lines below ...

這裡的問題似乎是相對路徑;請注意C:上面目錄中缺少的內容。使路徑絕對化是我的第一步。

#skip-innodb
innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"
#innodb_log_arch_dir = "C:/xampp/mysql/data"
  1. 在新版的 XAMPP 中我想開始使用:
    • /xampp/mysql/我改名了數據舊數據
    • 然後還是在同一個目錄下/xampp/mysql/我複製了數據我的舊 XAMPP 目錄。
  2. 然後我啟動了 mysql 伺服器,一切順利

希望這對某人有幫助!

答案3

這是我在 Windows 10 上使用 MySQL 5.7 所做的

兩種安裝都是使用 MySQL Installer 完成的,因此設定相同,但與其他答案中描述的設定略有不同。

基本上,從原始安裝資料夾中,我只複製了以我感興趣的模式命名的資料夾。

  • 將主資料資料夾及其所有子資料夾(包括剛剛複製的資料夾)的所有權分配給該SYSTEM帳戶(而不是分配給管理員、管理員或用於進行複製的任何使用者);
  • 將 _ 新增NETWORK SERVICE至具有對該資料夾的完全控制權的使用者。

我在 MySQL 論壇上找到了這些說明,以下是原始訊息:

Ray Yates 的原始完整說明:

對於後代:

  1. 我右鍵單擊 C:...\Data\ 資料夾並選擇屬性 -> 安全性 - 高級,看到名為 NETWORK SERVICE 的主體

  2. 在單獨的視窗中我右鍵點擊複製的E:\MYSQL\Data\資料夾,發現沒有這樣的設定。

  3. I 按一下 [新增] 按鈕,然後選擇主連結並輸入物件名稱 NETWORK SERVICE 並 [確定]

  4. 我選擇網路服務並點擊[編輯]並選中完全控制[確定]

  5. 然後,我重複了所有原始步驟,伺服器按預期啟動。

相關內容