maco's life

主にエンジニアリングと読書について書いていきます。

容量がいっぱいになってmysqlが落ちた

容量がいっぱいになってmysqlが落ちたました。 もちろんテスト環境です。

落ちた時の状況としては

  • テストデータ作成スクリプト流している
  • 突然のRollback、mysqlに繋がらなくなる
  • エラーログに'full~'みたいなエラーででてる

っていった感じです。

サーバーのデータ容量をdfで見たら確かに一つだけUsedが100%。

よしデータあけるぞ!ってなってその後やったこと。

古いデータを消す

古いデータで必要のないものを消しました バックアップファイルで1日より前のものはいらなかったので

$ find . -atime +1 | grep <1日以内のファイル名> // 消しちゃいけないファイルが入っていないことを確認
$ find . -atime +1 -delete // 削除

これで500KB近く空きました。

削除したファイルだがプロセスが使用したままになっている

dfとduを実行してなんか容量に違いが出る。 調べると、既に削除されたファイルだがプロセスが使用しているものがあるらしく、そのせいのようでした。

$ lsof | grep deleted

を実行するとでてきました。

ただ消しちゃいけないものもあるのかなーと思い、明らかに使ってないだろうっていうものだけkill。 これで 100KB近く空きました。

binlogファイルを削除

その後調べると、mysqlのbinlogが22GBほどありました。

テスト環境は特にレプリケーションをしているわけでもなく、データを復旧したいということも特にないので容量を食っていたbinlogを削除。

これで22GB空きました。容量が空いたのでmysqlを再度起動できる状態です。

mysql起動

先程述べたようにbinlogファイルはテスト環境では必要ありません。同じことが起こらないようにmy.cnfの

log-bin=mysql-bin

コメントアウトしてbinlogが吐かれないようにしてから起動。

無事mysqlを起動できました。

最後に

もはやbinlogだけ消せば問題なかったかもしれませんが、時間を絞ってファイル削除とか、deletedな状態のものがあることを知れたこととかbinlogの必要性とか、色々知れて学びが多かったです。

このmysql落ちた1件で色々助言を下さった れもんさん ありがとうございました!