ある日、突然DBへのデータ挿入がエラーを吐くようになった。
ER_RECORD_FILE_FULL
空き容量が無いなら今のデータをエクスポートしてDELETEでテーブルを空にしたら治るだろう、、と思っていたがそんな簡単な話ではなかった。以下はこの件から学んだこと。
# df
:
/dev/sda1 15673611 15657148 0 100% /
:
/var/lib/mysql# du -s `ls`
:
:
49612 ib_logfile0
49612 ib_logfile1
79854 ibdata1
:
- DELETEでデータを削除しても即座にデータが破棄されてその領域が解放されるわけでは無い。
- https://agohack.com/mysql-fragmention-optimization/
- https://dba.stackexchange.com/questions/65216/need-help-to-understand-how-information-schema-tables-get-updated
- https://www.it-swarm-ja.tech/ja/mysql/informationschematables%E3%81%AE%E6%9B%B4%E6%96%B0%E6%96%B9%E6%B3%95%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AB%E5%8A%A9%E3%81%91%E3%81%8C%E5%BF%85%E8%A6%81/l958341676/
- https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0035
- TRUNCATE・OPTIMIZEも結局は空きスペースに再作成しているので空きがない状況ではもう遅い。
- https://agohack.com/no-space-left-on-device-error/
- https://qastack.jp/programming/30635603/what-does-table-does-not-support-optimize-doing-recreate-analyze-instead-me
- https://stackoverflow.com/questions/44280212/error-1030-hy000-at-line-25-got-error-168-from-storage-engine
I was trying to truncate a table. I couldn't do it through the web script or through MySQL Workbench.
After shaking my fist at the server admin I deleted some temporary files, as I had to wait for his availability, and I was then able to perform my truncate.
- ib_logfileやibdataがめっちゃ食ってる時の対応方法。HDD100%ではダンプすらできないので話にならない。
- https://masayuki14.hatenablog.com/entry/20100308/1268039336
- https://qiita.com/kooohei/items/15607ffbc3226d636b3f
- http://k-1-ne-jp.blogspot.com/2012/11/ibdataiblogfile.html
一度大きくなったibdataのテーブルスペースを小さくする手段としては、ダンプ後にibdata*のファイルを削除後にリストアするしか方法がない
- HDD100%ではMySQLが起動しなくなる!!
再起動したらMySQLにログインできなくなった。
mysql.sock
は起動時に生成されるファイルであるが、ディスク100%だと生成に失敗するらしい。こうなると他の要らないファイルを消すなどしてディスクを開けるしかない。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- https://qiita.com/kanohisa/items/564035efd74d9c75bdcb
- https://qiita.com/masa_stone22/items/38a286a89c309de7d44e
- https://teratail.com/questions/105500
- https://teratail.com/questions/48289
ディスクフルになると、多くのプロセスが書き込みに失敗して、落ちると思います。
MySQLも落ちて、起動できなくなったんでしょう。
- 空き容量がシビアな時のダンプの仕方
一般的なダンプ時の資料
- https://qiita.com/iika0220/items/01d4b8bde4c06cf13fec
- https://www.risewill.co.jp/blog/archives/195
- https://weblabo.oscasierra.net/mysql-mysqldump-01/
- https://ja.stackoverflow.com/questions/28875/mysql5-6%E3%81%A7-%E5%85%A8db%E3%82%92%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%81%99%E3%82%8B%E9%9A%9B-single-transaction-lock-all-tables-%E4%BD%95%E3%82%8C%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B
UbuntuへのMySQLインストール
MySQLのテーブル毎の容量確認
ディスク使用率確認のコマンド