web-dev-qa-db-ja.com

mysql binは安全に削除できますか?

彼らはあまりにも多くのスペースを占めています:

/var/lib/mysql/jiaoyou-slow.log: 53M
/var/lib/mysql/mysql-bin.000005: 68M
/var/lib/mysql/mysql-bin.000003: 1.1G
/var/lib/mysql/mysql-bin.000007: 34M
/var/lib/mysql/mysql-bin.000004: 225M
5
Mask

いいえ、手動で削除しないでください。それらを削除するコマンドがあります。それらをディスクレベルで削除すると、mysqlがクラッシュします。適切なコマンドは次のとおりです。

PURGE BINARY LOGS TO 'mysql-bin.010';

詳細は here を参照してください。

9
RageZ

バイナリロギングを使用する理由はいくつかあります。重要度の高い順に:

  1. レプリケーション-スレーブはマスターのバイナリログからコンテンツを吸い込みます。
  2. バックアップの粒度の向上-以前のバックアップポイントよりもログを再生します。
  3. クエリロギング-ときどき「何の書き込みクエリが実行されたか」について、一般的なクエリログよりも効率的瞬間。

したがって、バイナリログを削除する前に確認することが3つあります。

  1. レプリケーションスレーブはありますか?それらは最新ですか?
    • スレーブがリレーログにプルする前にバイナリログを削除すると、レプリケーションを続行できなくなります。また、リレーログを削除してマスターから再度スプールする必要がある場合があります。
  2. バックアップはチェックされていますか?
  3. そのロギング期間中に実行されたクエリを確認する必要がありますか?

これらすべての回答に満足している場合は、RageZで示されているように、PURGEコマンドを使用してそれらを削除してください。絶対にしないでください MySQLはそれらを追跡するのが好きなので、手動で削除します。構文TOを使用してファイル名を指定するか、BEFOREを使用して日付を指定できます。 MySQLが現在開いているファイルはSHOW MASTER STATUSで確認できます。

kedarの注記のように、expire_logs_daysを使用する方がはるかに優れています。これにより、N日より古いバイナリログを削除するアクションが自動的に実行されます。

8
Dan Carley

また、expire_logs_daysを使用することもできます http://dev.mysql.com/doc/refman/5.0/en/purge-binary-logs.html

3
kedar