mysql數據存儲文件遷移備份*

有時候運維人員會直接拷貝數據庫文件給咱們,這個時候就須要把數據還原到mysql中,注意mysql版本要對應(也能夠版本高一點),mysql所在的操做系統也注意最好同樣(有一次window的到linux的mysql,就有部分表沒法恢復),首先參考mysql數據儲存文件個格式,參考:mysql數據庫引擎和他們文件存儲介紹 html

  1. 針對myisam數據庫引擎文件,每一個表有.myd,.myi,.frm三個文件,這種數據庫引擎的表很好恢復,直接把這三個文件複製到新的庫中,有如下須要注意的地方。
  • 要文件的全部者修改成mysql,由於若是用root帳號傳輸文件,文件的全部者就變成了root。
  • 還原到新庫的mysql版本必定要跟原來的mysql版本同樣,或者高一點也行。有一次還原到低一點的版本,老是報錯,由於版本不一樣文件內部的存儲格式可能會有變化。
  1. 針對innodb數據庫引擎文件。這種數據庫引擎分共享表空間和獨立表空間。注意mysql版本也要對應或者新的mysql版本稍高一點也行。
  • 共享表空間,這種表空間有/var/lib/mysq/ibdata1和在數據庫中的.frm文件,還有logfile,應該就是把這三種文件複製到新庫中,也要注意傳輸文件後修改文件的擁有者。
  • 獨立表空間,有ibdata1文件和每一個表的.ibd、.frm文件,這種方式很簡單,直接把文件複製到mysql的數據目錄中,重啓mysql便可。
  • 獨立表空間,這種表空間的表文件都在每一個庫中,僅有.ibd,.frm文件,但知道表結構,恢復步驟有點複雜。
    1.修改/etc/my.cnf,修改以下兩項的值,修改後重啓mysql服務
innodb_file_per_table=1 #由於是獨立表空間,這裏要設置成獨立表空間
innodb_force_recovery=1 #設置成1,好像是爲了保護表數據

2.建立新數據庫,建立要恢復表相同的表結構(表結構必須相同,表名稱最好也相同),若是能夠查看原來的表,可使用命令:show create table xxx;查看。
3.進入xxx表的數據存儲目錄,把xxx.ibd複製到~目錄下。
4.在mysql中執行alter table xxx discard tablespace; 進入xxx表的數據存儲目錄,查看xxx.ibd是否已經刪除,未刪除要手動刪除。
5.把要恢復的表的ibd文件複製到xxx表的數據存儲目錄(至關於替換原來的表的ibd文件),注意把文件的全部者賦給mysql。
6.使用命令:vim -b ~/xxx.ibd,輸入:%!xxd,將二進制轉換成16進制查看,查看第3行的數據,以下是tablespace id是2
0000020: 0000 0000 0002 0000 0002 0000 0000 0000
7.使用命令:vim -b /var/lib/mysql/test/xxx.ibd,輸入:%!xxd,把要恢復的xxx.id文件的這一行一樣改爲0002(有2個地方要改,第4列和第6列),改爲相同的tablespace id(若是tablespace id在2個.ibd文件中不同,不修改爲相同的話就會在/var/log/mysqld.log中報錯,說他們不同,在mysql命令行行是報engine -1什麼的錯誤),改完後輸入:%!xxd -r,將16進制轉換成2進制,再輸入:x或者:wq保存。
8.在mysql中執行alter table xxx import tablespace; 而後就能夠查看錶的數據了。
參考:MySQL 5.6.26 經過frm & ibd 恢復數據過程    MySQL ibdata損壞或丟失 經過frm&ibd文件恢復數據 mysql

相關文章
相關標籤/搜索