硬盤空間滿致使mysql ibd文件被刪後提示Tablespace is missing for table ‘db_rsk/XXX「html
昨天一早,開發人員反饋說一個測試環境報Tablespace is missing for table ‘db_rsk/XXX「,週末剛升級過,特意讓開發回去查了下,說腳本中確定沒有drop table的操做。datadir下檢查了下,發現frm文件在的ibd文件沒有了,bing了下,沒發現相似異常。因而先回到mysql.err往回搜索,半天后發現上週五下午mysql出現了一次異常宕機,說是磁盤空間不足了,看日誌該文件被損壞了,以下:mysql
171128 10:09:29 InnoDB: cannot calculate statistics for table gadmobe/cpi_partner InnoDB: because the .ibd file is missing. For help, please refer to InnoDB: http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html
171128 10:09:29 [ERROR] MySQL is trying to open a table handle but the .ibd file for table gadmobe/cpi_partner does not exist. Have you deleted the .ibd file from the database directory under the MySQL datadir, or have you used DISCARD TABLESPACE? See http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html
隨後後臺就一直報 ibd file is missing。sql
找到問題了,解決就方便了,找個備份,把這張表從新導入進去就能夠了。oracle
補充:若是從新建立的時候出現相似「 「db_rsk」.」tb_rsk_compliancecalcservice」」已存在的提示,drop的時候又出現unkown table 「db_rsk」.」tb_rsk_compliancecalcservice」的狀況,則先刪除data目錄下對應表的ibd和frm文件,而後使用mysqladmin shutdown, mysqld_safe乾淨的重啓,不要kill -9。不然,該錯誤可能會一直存在。測試
這說回來,mysql的容錯程度比oracle好多了,oracle異常後恢復的時候常常要resetlogs,有些時候連resetlogs也會失敗。spa