MySQLの空き容量不足でレコードを作れなくなった時に読む資料

ある日、突然DBへのデータ挿入がエラーを吐くようになった。

> ER_RECORD_FILE_FULL

空き容量が無いなら今のデータをエクスポートしてDELETEでテーブルを空にしたら治るだろう、、と思っていたがそんな簡単な話ではなかった。以下はこの件から学んだこと。

```shell
# df
 :
/dev/sda1       15673611 15657148         0 100% /
 :
```

```
/var/lib/mysql# du -s `ls`
 :
 :
49612   ib_logfile0
49612   ib_logfile1
79854   ibdata1
 :
```

1) 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

2) 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.

3) 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*のファイルを削除後にリストアするしか方法がない

4) 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も落ちて、起動できなくなったんでしょう。

5) 空き容量がシビアな時のダンプの仕方

* https://www.softel.co.jp/blogs/tech/archives/5735

---

一般的なダンプ時の資料

* 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インストール

* https://qiita.com/houtarou/items/a44ce783d09201fc28f5

MySQLのテーブル毎の容量確認

* http://www.rexent.co.jp/blog/mysql-%E5%90%84%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E6%AF%8E%E3%81%AB%E5%AE%B9%E9%87%8F%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B

ディスク使用率確認のコマンド

* https://eng-entrance.com/linux-storage
* https://www.atmarkit.co.jp/ait/articles/1610/25/news016.html