《Mysql入門mysql表物理文件被誤刪的解決方法》要點(diǎn):
本文介紹了Mysql入門mysql表物理文件被誤刪的解決方法,希望對您有用。如果有疑問,可以聯(lián)系我們。
前言MYSQL教程
????? 1、該方法只介紹了如何救回這個表名(數(shù)據(jù)不恢復(fù)) 如果想要恢復(fù)原來數(shù)據(jù) 直接用extundelete把文件恢復(fù)后放回去即可
MYSQL教程
????? 2、并且是適用于平時沒有全備的情況下? 如果有全備 直接那全備的frm和idb文件放回去 就可以了
MYSQL教程
???? ?3、該方法同樣適用于數(shù)據(jù)表遷移(只遷移一個表)? 因?yàn)閐iscard再import的速度 遠(yuǎn)比先dump再恢復(fù)的速度要快得多
MYSQL教程
建議: 平時備份一下表結(jié)構(gòu)是非常重要的
MYSQL教程
-- 如果你直接刪除了mysql的表文件 (.frm .idb)? 在mysql5.6 可能你就悲劇了? 可能再也用不回這個表名了
MYSQL教程
例子如下MYSQL教程
-- 全在datadir目錄下操作
MYSQL教程
-- 直接刪除了表 tracking20160501的物理文件MYSQL教程
rm -rf tracking20160501.* -- 刪除了表tracking20160501的frm文件和idb文件
-- 此時在數(shù)據(jù)庫已經(jīng)看不到該表MYSQL教程
mysql> show tables; -- 查看數(shù)據(jù)庫表
-- 但若想再創(chuàng)建該表或刪除該表? 也許就悲劇了MYSQL教程
mysql> create table tracking20160501(id int); ERROR 1050 (42S01): Table 'tracking20160501' already exists -- 明明已經(jīng)看不到該表了 卻顯示表已存在 mysql> drop table tracking20160501; ERROR 1051 (42S02): Unknown table 'kdnet_analyze.tracking20160501' -- 悲劇了吧 創(chuàng)建不到也刪不到..
-- 查看一下現(xiàn)在的物理文件情況MYSQL教程
ls tracking20160501.* tracking20160501.ibd -- 之前刪除了的表空間文件 他自己又創(chuàng)建了個出來 可能是剛剛的create table命令導(dǎo)致的 這里不用理
原因: 由于直接刪除了表的物理文件 但mysql的信息庫 information_schema 或 mysql 庫對該表的信息還存在(具體記在哪里 還沒找出來) 導(dǎo)致mysql還認(rèn)為該表存在 所以創(chuàng)建不了 刪除表時由于又找不到對應(yīng)的物理文件 所以也刪除不了? 這樣!! 難道這個表名就無法再用了嗎??MYSQL教程
有解決方法 如下
MYSQL教程
-- 找其他表(最好是表結(jié)構(gòu)一樣的) 這里找的表叫ip_taobao 先復(fù)制這個表的.frm(表結(jié)構(gòu))文件 改名為誤刪的表名MYSQL教程
cp -a ip_taobao.frm tracking20160501.frm -- 這里為了保持mysql文件的擁有人和所屬組 所以使用-a參數(shù)
-- 如果下面的操作有什么奇葩問題 可以重啟一下數(shù)據(jù)庫
-- 在mysql里 使用discard space命令 廢棄誤刪表的表空間文件MYSQL教程
alter table tracking20160501 discard tablespace;
-- 再復(fù)制ip_taobao表的表空間文件 改名為誤刪的表名MYSQL教程
cp -a ip_taobao.ibd tracking20160501.ibd -- 同樣使用-a 保持擁有人和所屬組
-- 在mysql里 使用import space命令 導(dǎo)入新的表空間文件MYSQL教程
mysql> alter table tracking20160501 import tablespace; -- 導(dǎo)入時間可能會長點(diǎn) Query OK, 0 rows affected, 5 warnings (7 min 36.94 sec)
-- 現(xiàn)在可以正常查詢、刪除和創(chuàng)建回這個表了MYSQL教程
mysql> select * from tracking20160501 limit 1 mysql> drop table tracking20160501; mysql> create table tracking20160501(id int);
總結(jié)MYSQL教程
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流.MYSQL教程
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/1211.html