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查看。mysql

MyISAM引擎表恢復數據

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

Innodb引擎表恢復數據

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

systemctl restart mysqld

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

恢復的數據

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

參考文章

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

相關文章
相關標籤/搜索