ディスクがいっぱいになり、mysqldが起動しなくなりました。

ディスクがいっぱいになり、mysqldが起動しなくなりました。

ログをクリーンアップしたり、最大のファイルを見つけてスペースを減らすにはどうすればよいですか?この重要な瞬間に1.7Tを使用しなかったことも理解できません。

Mysqld は 99% 使用されて実行されていません。

# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           20G   19G  279M  99% /
/dev/root        20G   19G  279M  99% /
devtmpfs         32G  268K   32G   1% /dev
/dev/md3        1.8T  196M  1.7T   1% /home
tmpfs            32G     0   32G   0% /dev/shm
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named
/dev/root        20G   19G  279M  99% /var/named/chroot/var/named
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.conf
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.rfc1912.zones
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/rndc.key
/dev/root        20G   19G  279M  99% /var/named/chroot/usr/lib64/bind
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.iscdlv.key
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.root.key

答え1

.NETファイルにはMySQLデータストレージ/var/libスペースがなくなりました/var。 MySQLを起動できません。実は本当に簡単です。見てきれいに/var/logしてみてください。次のようなことをお勧めします(gzのすべてのファイルを削除/var/log)。

$ find /var/log -iname "*.gz" -delete

もちろん、まず削除された項目を確認したい場合があります。

$ find /var/log -iname "*.gz"

1.7TBが割り当てられます/home。しかしそうでは/varありません/home。したがって/home、使用されません。それも非常に簡単です。

/varシステムをセットアップするときは、より大きなパーティションに分割する必要があります。現在私が見つけることができる最善の解決策は、MySQLデータディレクトリをより大きなパーティション(/home)に移動することです。

$ mv /var/lib/mysql /home
$ ln -s /home/mysql /var/lib/mysql

リンクを使用したくない場合は、ストレージを使用するようにMySQLを再設定し、次の変更を行う必要があります/home/etc/mysql/my.cnf

datadir = /var/lib/mysql

これに関して:

datadir = /home/mysql

MySQLには空き容量があるので、問題なく起動します。このような重要なデータベースをホストしている場合は、パーティション化スキームをもう一度考えてください。

すべてが順調に進んでいる場合は、アプリケーションがログにあまりにも多くの内容を書き込んではいけないため、ログの内容を調べることもできます。どこかでうまく機能するために何か問題があるかもしれません。

答え2

以下は、最大のファイルを見つけるのに便利なコマンドです。

du -ak /var | sort -nr | less

使用法:

du -ak-aパーティション内のすべての()ファイルのディスク使用量を要約し、/varサイズをキロバイト(-k)単位で印刷します。

sort -nrファイルのリストを連結し、逆順( -r)数字( -n)順に並べ替えます。

less最大の違反者が一番上に表示され、リスト内で前後に移動できるように、出力にページが付けられます。

答え3

私はこれがデータベースファイル自体ではなく、mysqlバイナリログで問題になる可能性があることを指摘したいと思います。多くの場合、Binlogはデフォルトで/var/log/mysqlディレクトリにあり、データベースファイルよりも数倍多くのディスク容量を消費する傾向があります。これは、バイナリログがデータベースデータの変更を追跡するためにすべてのSQLデータ変更クエリ(UPDATE、INSERTなど)を保存するためです。 Binlogはshell rmコマンドを介して直接削除しないでください。実行中のデータベースエンジンからmysqlコマンドを介してのみ削除する必要があります。これを行うには、mysqlサーバーを起動する必要があります。 /var/lib/mysqlディレクトリを/homeパーティションに移動する場合は、/パーティションからmysqlサーバーを起動するのに十分なスペースを確保する必要があると思います。したがって、プログラムは次のようになります。

  1. @John WH Smithの説明に従って、mysqlデータを/ homeパーティションに移動します。
  2. @John WH Smithの説明に従ってdatadir変数を変更し、mysqlサーバーを実行します。
  3. PMA、mysql、または他のクライアントを介してrootとしてmysqlサーバーに接続します。
  4. RESET MASTERまたはPURGE BINARY LOGS TOコマンドを使用してバイナリログを削除します(詳細はmysqlのドキュメントを参照)。
  5. mysqlサーバーを停止します。 mysql設定ファイルを編集します。 "log_bin"変数の値を覚えておいてください。これには、バイナリログファイルのパスと名前が含まれます。
  6. すべてのbinlogファイル(binlogインデックスを含む)を/ home / mysql /ディレクトリに移動します。
  7. 'log_bin'変数の値を 'log_bin = /home/mysql/mysql-bin.log'に変更してmysqlデータベースを起動します。

関連情報