mysql利用表對象數據文件恢復數據

數據庫文件基礎

  • .frm文件: 只存儲表的結構信息,frm文件跟數據庫存儲引擎無關,這也就是說,它和表的索引、數據都無關。

MyISAM引擎

  • .myd文件: 數據文件
  • .myi文件:索引文件

Innodb引擎

  • ib_logfile0和ib_logfile1:重做日誌文件,兩個文件一模一樣,之所以存在兩個是,爲了避免一個文件損壞後,而且MySQL crash之後,innodb無法恢復數據。
  • ibdata1:數據文件
根據《MySQL技術內幕》一書的介紹,innodb存在表空間的概念,是以共享表空間的格式,將數據都存入到一個文件中。介紹ibdata1,ibdata1是與存儲引擎相關的,只在innodb存儲引擎下出現,而且是mysql-server中所有innodb存儲引擎的表,不分數據庫都存儲到ibdata1中,當然這個文件中還會存儲其他信息,如索引等。當在MySQL中開啓innodb_file_per_table後,那麼將會在每個數據庫對應的文件夾下,每張表將有存在兩個對應文件,一個是.frm,另外一個是.ibd文件。這種情況成爲私有表空間。但是這個時候共享表空間ibdata1,仍然是存在的。

使用數據庫文件恢復數據

yum安裝的mysql,數據目錄是/var/lib/mysql,可以通過/etc/my.cnf查看。

MyISAM引擎表恢復數據

直接備份.frm,.myd,.myi文件,然後再複製粘貼到目標數據庫文件夾即可。

Innodb引擎表恢復數據

如果是系統表空間的情況,一個笨辦法就是建立一個新的mysql環境,將舊環境中的ibdata1文件和需要恢復的aa,bb等數據庫文件夾複製到新mysql數據目錄。然後重啓mysqld守護進程就行。

systemctl restart mysqld

下面是恢復的rbac數據庫user表的數據

恢復的數據

如果是私有表空間的話,雖然沒實驗過,但我猜想,直接複製.frm文件和.ibd文件到目標數據庫即可。

參考文章

利用數據庫文件恢復MySQL數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章