MySQLバイナリログの3つのモード解析

1585 ワード

原文の出典http://www.abcdocker.com/abcdocker/213
Row Level行モード
ログは、各行のデータが変更された形式を記録し、slave側で同じデータを変更する利点があります.row levelモードでは、bin-logにはsql文を実行するコンテキストに関する情報を記録せず、どの変更を記録するかだけを記録できます.したがってrow levelのログ内容は、各行のデータ変更の詳細を非常に明確に記録します.特定の場合のストレージ・プロシージャやfunction、triggerの呼び出しやトリガが正しくコピーされないという問題は発生しません.欠点:row levelのすべての実行文は、ログに記録されたものが正しい場合、各行の記録の変更で記録され、大量のログ内容が生成されます.
Statement Leve(デフォルト)
データを変更するsql文は、masterのbin-logに記録されます.slaveは、レプリケーション時にsqlプロセスを元のmaster側で実行したものと同じsqlに解析して再実行します.利点:statement leveの利点はrow levelの欠点を解決し、各行のデータ変化を記録する必要がなく、bin-logログ量を減らし、IOを節約し、性能を高めることです.欠点:記録のみのため、statementレベルではMySQLのレプリケーションに問題が発生することが多く、主にデータベースを変更する際に特定の関数や機能を使用する場合があります.
Mixed自動モード
このモードでは、MySQLは実行するsql文によってログに対するフォーマットを区別します.つまりstatementとRowの前に1つを選択し、sql文がupdateやdeleteなどのデータを修正する文である場合、すべての行の変更も記録します.####解析行モードと文モードの違い100万個のレコードを削除する場合、行モード(ROW)ログには100万個の削除コマンドが記載され、文モード(ststement)にはdelete * from test個のレコードが記録されます.
エンタープライズシーンbinlogのモードを選択する方法
1.生産中にMySQLの特殊な機能が比較的少ない場合(保存プロセス、トリガ、関数)、デフォルトの文モードであるStatement Levelを選択する.2、生産中にMySQLの特殊な機能が多い場合、Mixedモードを選択することができる.3、もし生産の中でMySQLの特殊な機能を使うのが比較的に多いならば、一部の昂のデータは最大化して一致して、この時最も良いRow levelモード、しかしこのモードのログの量が非常に大きいことに注意します.
binlogモードの表示
mysql> show global variables like "%binlog_format%"

binlogログモードの構成
# vim my.cnf   
# [mysql]     
log-bin = /data/3306/mysql-bin
binlog_format="STATEMENT"
#binlog_format="ROW"
#binlog_format="MIXED"
            binlog   
mysql> SET global binlog_format='STATEMENT'