不小心刪除了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就加...