レプリケーション環境でのバイナリログの削除について質問があります。
1つのマスターと2つのスレーブ(mysql 5.5を実行)の環境があります。重い処理時間中にスペースの問題が発生し、binログディレクトリがいっぱいになることがあります。ログは3日ごとに期限切れになります。私は疑問に思っていましたが、すべてのボックス(マスターと両方のスレーブ)でログを3日間保持する必要がある理由はありますか?たとえば、マスターでは3日間、スレーブでは1日間ログを保持することは理にかなっていますか?それについて行く最善の方法は何ですか?
ありがとうございました!
スレーブがマスターでない場合、スレーブはバイナリロギングをまったく必要としません。スレーブが蓄積するリレーログスペースの量に上限を設けることができます。 4Gでリレーログをスロットルするには、すべてのスレーブの/etc/my/.cnfに relay_log_space_limit
を追加します
[mysqld]
relay_log_space_limit=4G
とmysqlを再起動します
これを設定できない場合は、少なくともSHOW SLAVE STATUS\G
を実行する何らかのアラートがあり、Relay_Log_Space
(リレーログによって消費された合計バイト数)の値を確認する必要があります。
マスターについては、expire_logs_days
を1に設定することができますが、重大な警告があります...
レプリケーションが中断した場合は、1日以内に修正してください。そうしないと、マスター上のバイナリログがローテーションしてしまい、レプリケーションを再調整するためにCHANGE MASTER TOコマンドを実行できません。私は expire_logs_days
をマスターの3に残します。
夜間に一括処理を行う必要がある場合は、セッションの開始時にSET SQL_LOG_BIN=0;
を使用してマスターで一括処理を実行する必要があります。もちろん、これはスレーブに複製されません。同じバルクロードを両方のスレーブに並行して実行できます。
マスターバイナリログの蓄積を管理するために実行できるもう1つのことは、これです。
両方のスレーブでSHOW SLAVE STATUS\G
を実行します。 Relay_Master_Log_File
をご覧ください。これは、最後のコマンドがスレーブで実行されたマスターのバイナリログを表します。
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.4.92.250
Master_User: replicant
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.009677
Read_Master_Log_Pos: 855227755
Relay_Log_File: relay-bin.000674
Relay_Log_Pos: 757296783
Relay_Master_Log_File: mysql-bin.009590
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 757296646
Relay_Log_Space: 94274010765
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 80561
1 row in set (0.00 sec)
この例では、Relay_Master_Log_Fileはmysql-bin.009590です。これより前のすべてのバイナリログはマスターから削除できます。これをマスターで実行できます:
PURGE BINARY LOGS TO 'mysql-bin.009590';
これにより、古いログが消去され、レプリケーションはそのまま残ります。
バイナリログは、完了したすべてのSQLトランザクションをSQLステートメントまたは行の変更として(FIFOキューのように)逐次コンパイルするファイルです。リレーログは、リモートからバイナリログエントリを収集するファイルですサーバー(別名マスター)。
MySQLレプリケーション
スレーブにフェイルオーバーし、それをマスターにしたい場合
log-bin=mysql-bin
を追加します新しく昇格したマスターへの他のスレーブのレプリケーションをセットアップし、スレーブのデータが新しく昇格したマスターと一致することを確認する必要があります
MySQL Documentation on relay-log
option によると、それを定義する必要があります。理由は次のとおりです。
MySQLがサーバーオプションを解析する方法のため、このオプションを指定する場合は、値を指定する必要があります。デフォルトのベース名は、オプションが実際に指定されていない場合にのみ使用されます。値を指定せずに--relay-logオプションを使用すると、予期しない動作が発生する可能性があります。この動作は、使用される他のオプション、それらが指定される順序、およびそれらがコマンドラインで指定されるかオプションファイルで指定されるかによって異なります。 MySQLがサーバーオプションを処理する方法の詳細については、セクション4.2.3「プログラムオプションの指定」を参照してください。