15

マスター スレーブ レプリケーション用にセットアップされた 1 組の 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]
...

しかしSHOW VARIABLES WHERE Variable_Name='expire_logs_days'、MySQL で実行すると、次の値が返されます。0

私はもう試した:

  • MySQL の再起動
  • この行を使用して:expire_logs_days='3'
  • 他の my.cnf ファイルを確認しました:
    • mysqld --help --verbose | grep cnf
    • 行を見つけました:/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf order of preference
    • 私のmy.cnfファイルは次の場所にあります/etc/my.cnf
    • 他の場所に my.cnf というファイルはありません
  • SET GLOBAL expire_logs_days=3MySQL内で動作しますが、それ自体は私の問題を実際には解決しません

そして、それが私がやろうと考えることができるすべてです。手動の PURGE コマンドを実行しましたが、これは問題なく動作しますが、cron を使用して PURGE コマンドを実行しないことをお勧めします (ただし、それを回避する方法がない場合はとにかく実行します)。

誰にもアイデアはありますか?私はほとんどタップされています。

ありがとう。

4

4 に答える 4

12

あなたの質問からの事実

  • バイナリログはローテーションできません
  • PURGEBINARYLOGSを実行できるとおっしゃいました

これが私の作業理論です

を使用してバイナリログを消去できるのでPURGE BINARY LOGS;、あなたが言及していないことを確認するための2つの場所があります

場所#1:mysql-bin.index

このファイルには、すべてのバイナリログの場所が含まれています。Expire_logs_daysが設定されている場合、mysqldはこのテキストファイルを開き、タイムスタンプが。未満のバイナリログに遭遇するまで、各ファイルの日時スタンプを確認しますNOW() - INTERVAL expire_logs_days DAY)

mysql-bin.indexのバイナリログは、数値的に連続していると予想されます。バイナリログが数値的に連続していない場合、ログローテーションは無効になります。

場所#2:/var/log/mysqlフォルダ

あなたによるとmy.cnf、このフォルダはすべてのバイナリログを保持しています。

ここに2つの質問があります:

  1. /var/log/mysql数値的に連続していないバイナリログはありますか?
  2. INにないバイナリログはあり/var/log/mysqlますか? mysql-bin.index

なぜこれらの状況が発生するのでしょうか?

時々、人々はOSのバイナリログを削除します。mysql-bin.indexmysqldはバイナリログの存在を内部的に追跡するために使用するため、これによりmysqldが破棄される可能性があります。rm -fmysqldが知っているように、ログローテーションメカニズムを論理的に壊してバイナリログを削除するだけです。

おすすめ

いずれかまたは両方が当てはまる場合は、次のようにこれをクリーンアップできます。

mysql -ANe"RESET MASTER"
service mysql stop
cd /var/log/mysql
rm -f mysql-bin.*
cd
service mysql start

この後、ブランドスパンキングの新しいバイナリログの設定が必要になります。

試してみる !!!

于 2013-03-19T22:06:14.423 に答える
0

my.cnf で何が起こっているのかわかりませんが、より大きな問題に関しては、いくつかの選択肢があるようです:

  1. mysqldump を実行し、ファイルをフラッシュ/パージするように指定します
  2. 「パージ」を実行します(これまでと同じように)
  3. セットmax_binlog_size。ドキュメントによると:

可能性のある削除は、起動時およびバイナリ ログのフラッシュ時に発生します。

さらに、サイズが max_binlog_size システム変数の値に達すると、バイナリ ログはフラッシュされます。

expire_logs_daysフラッシュ/パージを行うときに#3が行うようです。

于 2013-03-18T21:58:42.303 に答える
0

その設定ファイルの OTHER オプションを変更すると効果がありますか? 正しい構成ファイルをヒットしていることを確認する必要があります。server-id の値を変更することは、おそらく良い候補です。

効果がない場合は、次を実行して適切なファイルを見つけましょう。

ps補助 | grep mysqld

そして、 --defaults-file または --defaults-extra-file の値を見てください

それでも困惑する場合は、値を 0 に設定する --init-file がどこかに設定されていないことを確認してください。

于 2013-03-22T21:00:48.490 に答える