マスタースレーブレプリケーション用にセットアップされたMySQLデータベースのペアがあります。奴隷はうまくやっています。
一方、マスターは、私の最善の(自動化された)努力にもかかわらず、バイナリログを蓄えてきました。
MySQLのmy.cnfファイルに「expire_logs_days」変数を設定しようとしていますが、何らかの理由で無視されているようです。 my.cnfファイルは次のようになります。
[mysqld]
...
log-bin=/var/log/mysql/mysql-bin.log
server-id=1
expire_logs_days=3
log_bin_trust_function_creators=TRUE
sync_binlog=1
[mysqld_safe]
...
しかし、MySQLでSHOW VARIABLES WHERE Variable_Name='expire_logs_days'
を実行すると、0
の値が返されます。
私はもう試した:
expire_logs_days='3'
mysqld --help --verbose | grep cnf
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf order of preference
my.cnf
ファイルは/etc/my.cnf
にありますSET GLOBAL expire_logs_days=3
はMySQL内で機能しますが、私の問題自体は実際には解決しませんそして、それは私がすることができると思うことができるすべてについてです。手動のPURGEコマンドを実行しましたが、これは問題なく機能しますが、cronを使用してPURGEコマンドを実行しない方がよいでしょう(ただし、回避方法がない場合は、とにかく実行します)。
誰かアイデアはありますか?私はちょうどタップされています。
ありがとう。
_PURGE BINARY LOGS;
_を使用してバイナリログを消去できるので、あなたが言及していないことを確認するための2つの場所があります
mysql-bin.index
_このファイルには、すべてのバイナリログの場所が含まれています。 expire_logs_daysが設定されている場合、mysqldはこのテキストファイルを開き、タイムスタンプがNOW() - INTERVAL expire_logs_days DAY)
未満のバイナリログに遭遇するまで、各ファイルの日時スタンプを確認します。
Mysql-bin.indexのバイナリログは、数値的に連続していると予想されます。バイナリログが数値的に連続していない場合、ログローテーションは無効になります。
/var/log/mysql
_フォルダー_my.cnf
_によると、このフォルダーにはすべてのバイナリログが保持されます。
ここに2つの質問があります:
/var/log/mysql
_に数値的に連続していないバイナリログはありますか?/var/log/mysql
_にNOT IN _mysql-bin.index
_のバイナリログはありますか?時々、人々はOSのバイナリログを削除します。 mysqldは_mysql-bin.index
_を使用してバイナリログの存在を内部的に追跡するため、これによりmysqldが破棄される可能性があります。 mysqldが認識しているように、_rm -f
_を使用してバイナリログを削除するだけで、ログローテーションメカニズムが論理的に破壊されます。
どちらかまたは両方が当てはまる場合は、次のようにこれをクリーンアップできます。
_mysql -ANe"RESET MASTER"
service mysql stop
cd /var/log/mysql
rm -f mysql-bin.*
cd
service mysql start
_
この後、新しいバイナリログを設定するブランドが必要になります。
試してみる !!!
その構成ファイルのその他のオプションを変更しても効果はありますか?正しい設定ファイルをヒットしていることを確認する必要があります。 server-idの値を変更することはおそらく良い候補です。
効果がない場合は、次のコマンドを実行して適切なファイルを見つけましょう。
ps aux | grep mysqld
そして、-defaults-fileまたは--defaults-extra-fileの値を見てください。
それでも困っている場合は、値を0に設定している--init-fileがどこかに設定されていないことを確認してください。
Mysql(コミュニティ)バージョン8.0.17-1.sles12-OpenSUSEタンブルウィード2019.10.02
mysql> SET GLOBAL expire_logs_days = 4;
ERROR 3683 (HY000): The option expire_logs_days and binlog_expire_logs_seconds
cannot be used together. Please use binlog_expire_logs_seconds to set the expire
time (expire_logs_days is deprecated)
..
My.cnfで何が起こっているのかわかりませんが、より大きな問題については、いくつかの選択肢があるようです。
max_binlog_size
を設定します。ドキュメントによると:削除の可能性は、起動時およびバイナリログがフラッシュされたときに発生します。
そして
さらに、バイナリログは、そのサイズがmax_binlog_sizeシステム変数の値に達するとフラッシュされます。
フラッシュ/パージを実行すると、#3がexpire_logs_days
を実行するようです。