
從昨天開始我就無法運行我的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 文件,但這樣做時遇到了問題。
- 首先我停止了mysql(我使用XAMPP在本地運行它)
- 接下來我打開了我的.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"
- 在新版的 XAMPP 中我想開始使用:
- 在/xampp/mysql/我改名了數據到舊數據
- 然後還是在同一個目錄下/xampp/mysql/我複製了數據我的舊 XAMPP 目錄。
- 然後我啟動了 mysql 伺服器,一切順利
希望這對某人有幫助!
答案3
這是我在 Windows 10 上使用 MySQL 5.7 所做的
兩種安裝都是使用 MySQL Installer 完成的,因此設定相同,但與其他答案中描述的設定略有不同。
基本上,從原始安裝資料夾中,我只複製了以我感興趣的模式命名的資料夾。
- 將主資料資料夾及其所有子資料夾(包括剛剛複製的資料夾)的所有權分配給該
SYSTEM
帳戶(而不是分配給管理員、管理員或用於進行複製的任何使用者); - 將 _ 新增
NETWORK SERVICE
至具有對該資料夾的完全控制權的使用者。
我在 MySQL 論壇上找到了這些說明,以下是原始訊息:
Ray Yates 的原始完整說明:
對於後代:
我右鍵單擊 C:...\Data\ 資料夾並選擇屬性 -> 安全性 - 高級,看到名為 NETWORK SERVICE 的主體
在單獨的視窗中我右鍵點擊複製的E:\MYSQL\Data\資料夾,發現沒有這樣的設定。
I 按一下 [新增] 按鈕,然後選擇主連結並輸入物件名稱 NETWORK SERVICE 並 [確定]
我選擇網路服務並點擊[編輯]並選中完全控制[確定]
然後,我重複了所有原始步驟,伺服器按預期啟動。