mysql-binファイルを削除しても安全ですか?


92

私はこれらに出くわした、私は、MySQLでMMレプリケーションを持っている、と私は、不要なファイルを削除するボックスに空き領域を圧迫したいmysql-bin内のファイル/var/db/mysql/のように、それらのファイルの何百ものがありますがmysql-bin.000123mysql-bin.000223私は実行してMySQLのレプリケーションを確認しているなどshow master statusshow slave status彼らは特定の位置でいくつかのmysql-binファイルを使用しますが、他のすべてのbinファイルは、今後使用されない残り物であると思います。この場合、レプリケーションが現在指しているファイル以外のすべてのmysql-binファイルを削除しても安全ですか?

削除しても安全な場合、使用されていないファイルを自動的に削除するためにできることはありますか?

回答:


136

OSでそれらを削除しないでください。

mysqldにそれを行わせる必要があります。mysqldの管理方法は次のとおりです。

このファイルmysql-bin.[index]は、mysqldが生成し自動回転したすべてのバイナリログのリストを保持します。とともにbinlogを消去するメカニズムmysql-bin.[index]は次のとおりです。

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

これらは、指定したbinlogまたはタイムスタンプの前のすべてのバイナリログをクリアします。

たとえば、実行する場合

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

これにより、前にすべてのバイナリログが消去されますmysql-bin.000223

走ったら

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;

これにより、3日前の午前0時前にすべてのバイナリログが消去されます。

binlogを自動的に回転させて3日間保存したい場合は、これを設定するだけです:

mysql> SET GLOBAL expire_logs_days = 3;

次にこれを追加します /etc/my.cnf

[mysqld]
expire_logs_days=3

mysqldはログを削除します

スレーブの状態を表示\ G

これは重要です。を実行SHOW SLAVE STATUS\Gすると、マスターから2つのバイナリログが表示されます。

  • Master_Log_File
  • Relay_Master_Log_File

レプリケーションの遅延がほとんどまたはまったくない場合、これらは通常同じ値です。レプリケーションの遅延が多い場合、これらの値は異なります。単純にするために、何でも選択Relay_Master_Log_Fileして、マスターに戻って実行します

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

そうすれば、複製は中断されません。


1
:アンダースコアではなくダッシュを-タイプミスに注意してください[mysqld] expire_logs_days=3(あなたが含まれている必要があります[mysqld]セクション
changokun

@changokunそれはタイプミスではありません。my.cnfはダッシュを受け入れます。SET GLOBAL expire_logs_days = 3;mysqlクライアントから実行すると、それらは受け入れられません。MySQL Docsの例:dev.mysql.com/doc/refman/5.5/en/mysqld-option-tables.html
RolandoMySQLDBA

これは私のために動作します。質問、... mysql> SET GLOBAL expire_logs_days = 3;expire-logs-days=3in /etc/my.cnf..の違いは何ですか?同じですか?これは冗長ですか?または、実行してSET GLOBAL...から追加することが重要expire-logs-days=..ですか?ありがとう。
ニノパオロ

明らかに、すべてのログをすばやく削除します:PURGE BINARY LOGS BEFORE DATE(NOW());なぜこれに正気なデフォルトがないのですか?ログファイルのサイズを巨大なサイズに明示的に変更したことはありません。このコマンドを実行した後、10.0 GBのログファイルがあり、mysql.binフォルダーのサイズは1.6 GBに縮小しました。
マイケルトルー

20

これは本当にバックアップ戦略に依存します。バイナリログを保持する主な理由の1つは、データベースを「特定の時点」に復元することです。データベースがクラッシュして復元が必要な場合は、最新の完全バックアップを復元してから、完全バックアップの位置からバイナリログを再生します。

したがって、毎日フルバックアップを実行し、7日間分のバイナリログがある場合、過去4〜6日間分のバイナリログを削除できる可能性があります。このexpire_logs_days設定により、何日分のバイナリログを保持するかを制御できます。

保持する必要がある最も古いログを最初に確認することにより、不要なバイナリログを削除できます。

ls -lh /path/to/binary/logs/mysql-bin.0*

そして、mysqlで:

mysql> PURGE BINARY LOGS TO 'mysql-bin.XXXXX';

5

これを試して:

RESET MASTER;

文書では、言いました:

RESET MASTERを使用すると、バイナリログファイルとそれに関連するバイナリログインデックスファイルを削除して、マスターをバイナリロギングが開始される前の状態に戻すことができます。

これにより、関連するすべてのバイナリログファイルが削除されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.