硬盤空間滿導致mysql ibd文件被刪后提示Tablespace is missing for table 'db_rsk/XXX"


昨天一早,開發人員反饋說一個測試環境報Tablespace is missing for table 'db_rsk/XXX",周末剛升級過,特地讓開發回去查了下,說腳本中肯定沒有drop table的操作。datadir下檢查了下,發現frm文件在的ibd文件沒有了,bing了下,沒發現類似異常。於是先回到mysql.err往回搜索,半天后發現上周五下午mysql出現了一次異常宕機,說是磁盤空間不足了,看日志該文件被損壞了,如下:

2016-11-12 11:31:00 28443 [ERROR] Error writing file '/usr/local/Percona-Server-5.6.30-rel76.3-Linux.x86_64.ssl101/data/tmp-demo-slow.log' (errno: 1 - No space left on device)
2016-11-12 11:40:00 7fc9c995c700 InnoDB: Error: Write to file ./db_rsk/tb_rsk_compliancecalcservice.ibd failed at offset 0.
InnoDB: 65536 bytes should have been written, only 0 were written.
InnoDB: Operating system error number 28.
InnoDB: Check that your OS and file system support files of this size.
InnoDB: Check also that the disk is not full or a disk quota exceeded.
InnoDB: Error number 28 means 'No space left on device'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html
2016-11-12 11:40:00 28443 [ERROR] InnoDB: TRUNCATE TABLE db_rsk/tb_rsk_compliancecalcservice failed to create a new tablespace
2016-11-12 11:40:00 7fc9c995c700 InnoDB: cannot calculate statistics for table "db_rsk"."tb_rsk_compliancecalcservice" because the .ibd file is missing. For help, please refer to http://dev.mysql.com/doc/refma
n/5.6/en/innodb-troubleshooting.html

隨后后台就一直報 ibd file is missing。

找到問題了,解決就方便了,找個備份,把這張表重新導入進去就可以了。

補充:如果重新創建的時候出現類似“ "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也會失敗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM