解決誤刪mysql表物理檔案的方法

來源:互聯網
上載者:User

該方法只介紹了如何救回這個表名(資料不恢複) 如果想要恢複原來資料 直接用extundelete把檔案恢複後放回去即可

 並且是適用於平時沒有全備的情況下  如果有全備 直接那全備的frm和idb檔案放回去 就可以了
 該方法同樣適用於資料表遷移(只遷移一個表)  因為discard再import的速度 遠比先dump再恢複的速度要快得多
建議: 平時備份一下表結構是非常重要的

-- 如果你直接刪除了mysql的表檔案 (.frm .idb)  在mysql5.6 可能你就悲劇了  可能再也用不回這個表名了
例子如下

-- 全在datadir目錄下操作

-- 直接刪除了表 tracking20160501的物理檔案


rm -rf tracking20160501.*            
-- 刪除了表tracking20160501的frm檔案和idb檔案

 
-- 此時在資料庫已經看不到該表


mysql> show tables;                                                      
-- 查看資料庫表

 
-- 但若想再建立該表或刪除該表  也許就悲劇了

mysql> create table tracking20160501(id int);
ERROR 1050 (42S01): Table 'tracking20160501' already exists                       
-- 明明已經看不到該表了 卻顯示表已存在
mysql> drop table tracking20160501;
ERROR 1051 (42S02): Unknown table 'kdnet_analyze.tracking20160501'       
-- 悲劇了吧 建立不到也刪不到。。
-- 查看一下現在的物理檔案情況


ls tracking20160501.*
tracking20160501.ibd   
                         
 -- 之前刪除了的資料表空間檔案 他自己又建立了個出來  可能是剛剛的create table命令導致的 這裡不用理
原因: 由於直接刪除了表的物理檔案 但mysql的資訊庫 information_schema 或 mysql 庫對該表的資訊還存在(具體記在哪裡 還沒找出來) 導致mysql還認為該表存在 所以建立不了 刪除表時由於又找不到對應的物理檔案 所以也刪除不了  這樣!! 難道這個表名就無法再用了嗎?  有解決方案 如下
解決方案:

-- 找其他表(最好是表結構一樣的) 這裡找的表叫ip_taobao 先複製這個表的.frm(表結構)檔案 改名為誤刪的表名

cp -a ip_taobao.frm tracking20160501.frm   
                   
-- 這裡為了保持mysql檔案的擁有人和所屬組 所以使用-a參數
-- 如果下面的操作有什麼奇葩問題 可以重啟一下資料庫
-- 在mysql裡 使用discard space命令 廢棄誤刪表的資料表空間檔案


alter table tracking20160501 discard tablespace;

-- 再複製ip_taobao表的資料表空間檔案 改名為誤刪的表名


cp -a ip_taobao.ibd tracking20160501.ibd                        -- 同樣使用-a 保持擁有人和所屬組

-- 在mysql裡 使用import space命令 匯入新的資料表空間檔案


mysql> alter table tracking20160501 import tablespace;             -- 匯入時間可能會長點
Query OK, 0 rows affected, 5 warnings (7 min 36.94 sec)

-- 現在可以正常查詢、刪除和建立回這個表了


mysql> select * from tracking20160501 limit 1
mysql> drop table tracking20160501;
mysql> create table tracking20160501(id int);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.