mysql刪除了ibdata1後恢復資料庫

2021-09-01 16:03:33 字數 2494 閱讀 4483

不小心刪除了ibdata1且清空**站。網上各種搜尋恢復資料庫的方法,這是整理下來的東西.

windows系統下,mysql5.6版本

思路:

1. 資料庫的**檔案存在且完整無損。

2. myisam、innodb兩種型別的表結構恢復。

3. 建立同結構的空資料表。

4. myisam/innodb兩種型別的資料恢復。

一:恢復表結構。

如果已知表結構,可以跳過此過程。

mysql中的**資料儲存引擎分為兩種:myisam和ionndb兩種。不知道的同學可以看data資料夾下資料庫資料夾下的**檔案。

同一種檔名字尾有:frm、myd和myi三種的是myisam型別**。frm記錄表結構,myd儲存表裡的資料,myi儲存的索引。

同一種檔名字尾有:frm和ibd兩種的是innodb型別**。frm記錄表結構,idb儲存表裡的資料.

1. myisam**恢復表結構。(沒有具體操作過)

a. 建立相同名稱的表。**engine=myisam,只建立乙個資料列,資料可以是空。

create table test_myisam(id int(11) default)engine=myisam;

b. 停止mysql服務:net stop mysql

c. 將正常資料庫中的test_myisam.frm檔案複製乙份副本,以備後用。將要恢復的**test_myisam.frm複製正常資料目錄下,替換現有的.frm檔案。

d. 啟動mysql資料庫:net start mysql

e. 到相應的資料庫下show tables;如果能看到**繼續下一步。

f. 執行desc test_myisam;會報錯。

g. 建立和表名稱一樣的2個檔案:.myd和.myi。檔案可以是空內容。放在和.frm同一目錄下。

h. 執行恢復資料命令:repair table test_myisam use_frm;

i. 再次執行:desc  test_myisam;就可以看到表結構了。但**依然不是正常資料。

j. 在cmd中將表結構匯出:命令格式:mysqldump -h hostname -uroot -p database_name

2. innodb**恢復表結構。(具體操作過)

a. 建立相同名稱的表。**engine=innodb,只建立乙個資料列,資料可以是空。

create table test_innodb(id int(11) default)engine=innodb;

b. 停至mysql服務:net stop mysql

c. 修改mysql安裝目錄下的my.ini配置檔案。修改恢復配置:innodb_force_recovery = 6儲存。如果沒有就新增乙個,這個配置的值預設是0。

d. 將正常資料庫中的test_innodb.frm檔案複製乙份副本,後面還要用的。將要恢復的**test_innodb.frm複製正常資料庫目錄下,替換現有的.frm檔案。

e. 啟動mysql資料庫:net start mysql

f. 到相應的資料庫下show tables;如果能看到**繼續下一步。

g. 執行desc test_myisam;會報錯。接下來要去檢視日誌。

h. 用記事本開啟data資料夾下的.err檔案,這個是日誌檔案。在檔案中搜尋「column」,大概在檔案的倒數第3個[error]中,大意是這個表只有1列,mysql中有5列之類的。

####重點是這個5。當然每個人的**是不一樣的,要根據自己的實際情況####

i. 停止mysql服務。恢復第c和第d個步驟。在innodb_force_recovery = 6前加注釋符號#並儲存。將.frm檔案恢復正常。

j. 啟動mysql服務。修改**test_innodb**新增到5列。

k. 停止mysql服務。重複第c到f步驟。

l. 執行desc test_myisam;就可以看到表結構了。但**依然不是正常資料。

m. 在cmd中將表結構匯出:命令格式:mysqldump -h hostname -uroot -p database_name

二、恢復資料。

1. myisam**恢復資料。

a. 建立與要恢復的**同結構的表。資料可以是空。

b. 停止mysql服務。將要恢復的**的.myd和.myi,2個檔案複製到正常資料庫目錄下,替換已有的檔案。

c. 啟動mysql服務。執行命令:repair table test_myisam use_frm;

2. innodb**恢復資料

a.建立與要恢復的**同結構的表。資料可以是空。

b.執行命令:alter table test_innodb discard tablespace;移除表空間。

c.停止mysql服務。將要恢復的**的.ibd檔案複製到正常資料庫下。

e.啟動mysql服務。執行命令:alter table test_innodb import tablespace;匯入表空間。

如何刪除ibdata1

高危操作,謹慎執行,因為執行完操作之後,資料庫原來的表可能會不能用 資料庫優化需要注意的地方 1 在資料庫test中,如果其中一張表的資料量很大,那麼另一張表的插入效率會很低 2 ibdata1 當你啟用了 innodb file per table,表被儲存在他們自己的表空間裡,但是共享表空間仍然...

mysql中ibdata1過大的問題

ibdata1檔案是什麼?答 ibdata1是乙個用來構建innodb系統表空間的檔案,這個檔案包含了innodb表的元資料 撤銷記錄 修改buffer和雙寫buffer。如果file per table選項開啟的話,該檔案則不一定包含所有表的資料。當innodb file per table選項開...

如何收縮Mysql的ibdata1檔案

ibdata1是mysql資料庫中乙個資料檔案了,你會發現它來越大了,下面我來介紹收縮mysql的ibdata1檔案大小方法。如上所說,你沒法去收縮innodb資料檔案,你也沒辦法在一台沒有開啟innodb file per table選項的機器上直接加上該選項讓他工作,你必須在安裝完mysql就加...