奴隷
スレーブがマスターではない場合、スレーブはバイナリロギングをまったく必要としません。スレーブによって蓄積されるリレーログスペースの量に上限を設けることができます。4Gでrelay_log_space_limit
リレーログを調整するには、すべてのスレーブで/etc/my/.cnfに追加します
[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時に出発します。
提案#1
夜間の一括処理を行う場合は、おそらくSET SQL_LOG_BIN=0;
セッションの開始時にマスターで一括処理を実行する必要があります。もちろん、これはスレーブには複製されません。両方のスレーブに対して同じバルクロードを並行して実行できます。
提案#2
マスターバイナリログの蓄積を管理するためにできるもう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レプリケーションで
- マスターはバイナリログを有効にする必要があります
- スレーブはリレーログをコンパイルします
- リレーログ内のすべてのSQLが処理されると、削除されます
- スレーブでは、DBサーバーに複数のリレーログがある場合、IOスレッドがSQLスレッドがリレーログを処理できるよりも速くマスターからSQLを収集しているため、レプリケーションが遅れていることを示す場合があります。
- relay_log_space_limitを使用すると、レプリケーションが蓄積してディスクがいっぱいになるのを防ぎます。ルール#3に基づいてリレーログが回転する
- DBサーバーがマスターとスレーブの両方になることは可能です。これが、スレーブでバイナリログを有効にする必要がある唯一の状況です。そのシナリオでは、DBサーバーにはバイナリログとリレーログの両方があります。
スレーブにフェールオーバーし、マスターにしたい場合
- サービスmysql停止
log-bin=mysql-bin
スレーブの/etc/my.cnfに追加します
- サービスmysql start
新しく昇格したマスターに他のスレーブの複製を設定し、スレーブのデータが新しく昇格したマスターと一致することを確認する必要があります
更新2012-08-13 17:47 EDT
オプションのMySQLドキュメントにrelay-log
よると、それを定義する必要があります。その理由は次のとおりです。
MySQLがサーバーオプションを解析する方法により、このオプションを指定する場合、値を指定する必要があります。デフォルトのベース名は、オプションが実際に指定されていない場合にのみ使用されます。値を指定せずに--relay-logオプションを使用すると、予期しない動作が発生する可能性があります。この動作は、使用される他のオプション、指定される順序、およびコマンドラインまたはオプションファイルで指定されるかどうかによって異なります。MySQLがサーバーオプションを処理する方法の詳細については、セクション4.2.3「プログラムオプションの指定」を参照してください。