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

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

ログを消去したり、最大のファイルを見つけてスペースを削減するにはどうすればいいですか? また、この重要な瞬間に 1.7T が使用されていないことも理解できません。

99% が使用されているため、Mysqld は実行されていません。

# 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

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 バイナリ ログの問題である可能性もあることに注意してください。多くの場合、バイナリ ログはデフォルトで /var/log/mysql ディレクトリに配置され、データベース ファイルよりも数倍多くのディスク領域を消費する傾向があります。これは、データベース データの変更を追跡するために、すべての SQL データ変更クエリ (UPDATE、INSERT など) がバイナリ ログに保存されるためです。バイナリ ログは、シェルの 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 データベースを起動します。

関連情報