私はmysqlでMMレプリケーションを行っており、不要なファイルを削除するためにボックス内の空きスペースを絞りたいのですが、mysql-bin
内のこれらの/var/db/mysql/
ファイルに出くわしましたmysql-bin.000123
、mysql-bin.000223
などのファイルが数百あります。 show master status
とshow slave status
を実行すると、特定の位置でいくつかのmysql-binファイルが使用されますが、他のすべてのbinファイルはleftoversであり、今後は使用されません。この場合、レプリケーションが現在指しているものを除いて、これらのmysql-binファイルをすべて削除しても安全ですか?
削除しても安全な場合、私ができることは何ですか自動的に使用されなくなったファイルを削除しますか?
OSで削除しないでください。
Mysqldにそれを実行させる必要があります。 mysqldによる管理方法は次のとおりです。
ファイルmysql-bin.[index]
は、mysqldが生成して自動ローテーションしたすべてのバイナリログのリストを保持します。ビンログを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はそれらのログを削除します
これは重要です。 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つは、データベースを「特定の時点」に復元することです。データベースがクラッシュして復元が必要な場合は、最新の完全バックアップを復元してから、完全バックアップの位置からバイナリログを再生します。
したがって、毎日完全バックアップを実行し、7日間のバイナリログがある場合、過去4〜6日間のバイナリログを削除できる可能性があります。 expire_logs_days
設定を使用して、何日分のバイナリログを保持するかを制御できます。
保持したい最も古いログを最初に確認することで、不要なバイナリログを削除できます。
ls -lh /path/to/binary/logs/mysql-bin.0*
そしてmysqlで:
mysql> PURGE BINARY LOGS TO 'mysql-bin.XXXXX';
これを試して:
RESET MASTER;
ドキュメント が言ったように:
RESET MASTERを使用すると、バイナリログファイルとそれらに関連するバイナリログインデックスファイルを削除して、マスターをバイナリログが開始される前の状態に戻すことができます。
これにより、関連するすべてのバイナリログファイルが削除されますが、必要なものではない可能性があります。