3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLのDBファイルが肥大化して絶望を感じた時のこと

Posted at

たまたま職場でsyslogサーバが機能していないのを見つけました。
mysqlとか触ったことなかったので、その時の対応についてメモ。

状態の確認

ps -ef | grep mysql -> mysqldが起動しているか
cat /etc/mysql/my.cnf -> datadirやsoketのディレクトリを確認
df ->ディスクの空き容量が0になっていないか。

自分がみたときはディスクの空き容量が0になっており、/var/run/配下に作成されるはずのsocketファイルがなく、mysqldプロセスが落ちてました。

DBのファイルサイズは300GBを超えておりました。(明らかに大きすぎる)

mysqldの起動

無理やり容量を空けて復活させる。
/var/log/配下などの過去の圧縮ファイルを削除し、ほんの少しだけ容量を確保。
/etc/init.d/mysql startでプロセスを起動。
(環境によって違うと思います)

dumpの取得

dumpをとりたいけど、置き場がないので、
別のサーバの空きディスクにフルダンプを置くことにしました。

①待受ポートを作る
保存側: nc -l 9998 | gzip -d > ibdata1_20180628.txt
9998番が待受として当たります。

②mysqlのdumpをネットワーク経由で送信する
DB側: /usr/bin/mysqldump -u root --password=XXXXXX --all-databases --flush-logs | gzip -c | nc 【保存側IPアドレス】 9998

★時間かかるので&オプションをつけるのが良いと思います。
★自分はtmuxを使用しました。
50GB程度のdumpファイルができました。

肥大化したDBファイル(ibdata1)を削除

まずmysqlの停止
/etc/init.d/mysql stop

rm -f ib*
90%以上空き容量ができました。

dumpファイルを戻す

scpを使い、DBサーバに置きました。
ncコマンドでやり方がイメージできなかったので…。

リストア

mysqlの起動
/etc/init.d/mysql start

mysql -u root --password=XXXXXX < ibdata1_20180628.txt
★時間かかるので&オプションをつけるのが良いと思います。

2億件、50GBくらいのDBで4時間くらいかかりました。

なんとかなったみたいです。


以下のサイトを参考にさせていただきました。

参考:最速を究める! 2つのサーバ間で特盛りデータを30倍速で転送する方法
参考:MySQL ibdataのデータサイズが肥大化した場合の対処方法。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?