ログを消去したり、最大のファイルを見つけてスペースを削減するにはどうすればいいですか? また、この重要な瞬間に 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 サーバーを起動できると思います。したがって、手順は次のようになります。
- @John WH Smith の説明に従って、mysql データを /home パーティションに移動します。
- @John WH Smith の説明に従って datadir 変数を変更し、mysql サーバーを実行します。
- PMA、mysql、またはその他のクライアントを使用して、root ユーザーとして mysql サーバーに接続します。
- RESET MASTER または PURGE BINARY LOGS TO コマンドを使用してバイナリ ログを消去します (詳細については、mysql のドキュメントを参照してください)。
- mysql サーバーを停止します。mysql 構成ファイルを編集します。'log_bin' 変数の値を覚えておいてください。これにはバイナリ ログ ファイルのパスと名前が含まれています。
- binlog インデックスを含むすべての binlog ファイルを /home/mysql/ ディレクトリに移動します。
- 「log_bin」変数の値を「log_bin = /home/mysql/mysql-bin.log」に変更し、mysql データベースを起動します。