web-dev-qa-db-ja.com

レプリケーションを使用したライブサーバーのMysql FLUSH LOGS

レプリケーションのあるライブプロダクションデータベースで、しばらくの間、低速のクエリとインデックス付けされていないクエリのロギングを実行する必要があります。 GLOBAL const値を変更することは良い解決策のように聞こえます。 この記事 は、それについてもよく読んでいます。

問題は、マスター/スレーブでFLUSH LOGS;を実行する必要があることです。そして、それがレプリケーションにどのように影響するかはわかりません。ライブマスターとライブスレーブでFLUSH LOGS;を実行した場合の影響を誰かに教えてもらえますか?.

ありがとう

2
Rajat Singhal

FLUSH LOGS;はいつでも安全です。レプリケーションログをローテーションします。これは無害です。レプリケーションは、次のログに移動する方法を知っています。 binlogは、max_binlog_sizeを超えると自動的にローテーションされます。

5.6以前では、FLUSH LOGSはスローログをローテーションしませんでした。 http://dev.mysql.com/doc/refman/5.6/en/flush.html またはご使用のバージョンのページを参照してください。

reset masterを行ったことはありません。含めません。ビンログを自動的にパージするためにexpire_logs_daysを使用します。 (スレーブがその数日間オフラインであり、それに気付かない場合、私は面倒に値します。)

私はlog_queries_not_using_indexes = OFFを好む;そうしないと、スローログが乱雑になります。 (インデックスのないtinyテーブルは、実際には問題ではありません。)

2
Rick James

flush logs;を使用すると、通常reset masterを使用すると、保存されていないすべての変更がログに保存され、古い変更が削除されます。それには回避策があります:

レプリケーションを使用している場合は、スレーブがそれらを使用する必要がないことが確実になるまで、マスター上の古いバイナリログファイルを削除しないでください。たとえば、スレーブが3日以上遅れて実行されない場合、1日に1回、マスターでmysqladmin flush-logsを実行してから、3日以上経過したログを削除できます。ファイルは手動で削除できますが、PURGE BINARY LOGSを使用することをお勧めします。これにより、バイナリログインデックスファイルも安全に更新されます(日付引数を取ることができます)。セクション13.4.1.1「PURGE BINARY LOGS構文」を参照してください。

Mysqlbinlogユーティリティを使用して、バイナリログファイルの内容を表示できます。これは、回復操作のためにログ内のステートメントを再処理する場合に役立ちます。たとえば、次のようにバイナリログからMySQLサーバーを更新できます。

Shell> mysqlbinlog log_file | mysql -h server_name

http://dev.mysql.com/doc/refman/5.0/en/binary-log.html から引用

2
Ahmad Abuhasna