mysqlのbinlogの詳しい解のubuntuの下でbinlogを開きます
2192 ワード
1.mysql binlogとは
バイナリ・ログとも呼ばれるバイナリ・ファイルは、データの変更または潜在的な変更を記録するSQL文を記録し、ディスクにバイナリ形式で保存します.データベースの変更履歴(特定の時点ですべてのSQL操作)、データベースのインクリメンタル・バックアップとリカバリ(インクリメンタル・バックアップとポイント・ベースのリカバリ)、Mysqlのレプリケーション(プライマリ・プライマリ・データベースのレプリケーション、プライマリ・スレーブ・データベースのレプリケーション)を表示できます.
2.3種類の書式
1).Statement:データが変更されるsqlはbinlogに記録されます.利点:各行の変化を記録する必要がなく、binlogログ量を減らし、IOを節約し、性能を向上させる.(rowに比べてどれだけのパフォーマンスとログ量を節約できるかは、アプリケーションのSQLの場合によって異なり、通常同じレコードを変更したり、rowフォーマットを挿入したりして生成されるログ量はStatementで生成されるログ量よりも小さいが、条件付きupdate操作や、テーブル全体の削除、alterテーブルなどの操作を考慮すると、ROWフォーマットは大量のログを生成するため、ROWフォーマットを使用するかどうかを考慮するログはアプリケーションの実際の状況に従って、ログの量がどれだけ増加するか、IOのパフォーマンスの問題をもたらす必要があります.)欠点:記録されているのは実行文だけで、これらの文がslave上で正しく実行されるために、各文が実行されたときの関連情報を記録して、すべての文がslaveでmaster側で実行されたときと同じ結果を得ることができることを保証する必要があります.またmysqlのレプリケーションは、特定の関数機能のように、slaveがmaster上で一致するようにするには、sleep()関数、last_などの多くの関連問題があります.insert_id()およびuser-defined functions(udf)に問題が発生する.次の関数を使用する文もコピーできません. LOAD_FILE() UUID() USER() FOUND_ROWS() SYSDATE()(起動時に--sysdate-is-nowオプションが有効になっていない限り)INSERTで同時に...SELECTはRBRよりも多くの行段ロックを発生する2).Row:sql文コンテキストに関する情報は記録されず、どのレコードが変更されたかだけが保存されます.利点:binlogでは、実行されるsql文のコンテキストに関する情報を記録せずに、その記録が何に変更されたかを記録するだけです.したがってrowlevelのログの内容は、各行のデータ変更の詳細を非常に明確に記録します.特定の状況でのストレージ・プロシージャやfunction、triggerの呼び出しやトリガが正しくコピーされないという問題は発生しません.すべての実行文がログに記録されると、各行のレコードの変更で記録されます.これにより、update文や複数のレコードを変更するなど、大量のログ・コンテンツが生成される可能性があります.binlogには各変更が記録され、特にalter tableなどの文を実行すると、テーブル構造の変更により各レコードが変更され、テーブルの各レコードがログに記録されます.3).Mixedlevel:は以上の2つのlevelの混合使用であり、一般的な文の修正はstatment形式でbinlogを保存し、いくつかの関数のようにstatementが主従レプリケーションの操作を完了できない場合、row形式でbinlogを保存し、MySQLは実行する各具体的なsql文に基づいて記録に対するログ形式を区別し、すなわちStatementとRowの間で1つを選択する.新バージョンのMySQLではチームrowレベルモードも最適化されており、すべての変更がrowレベルで記録されるわけではなく、テーブル構造の変更に遭遇したときにstatementモードで記録されるようになっています.updateやdeleteなどのデータを変更する文については、すべての行の変更が記録されます.
まとめ:mysqlのbinlogはマルチファイルストレージで、1つのLogEventを位置決めするにはbinlog filename+binlog positionを通じてmysqlのbinlogデータフォーマットを位置決めする必要があり、生成の方式によって、主にstatement-based、row-based、mixedに分けられる.
binlog機能をオンにするには、/etc/mysql/my.cnfには、
mysql binlog
バイナリ・ログとも呼ばれるバイナリ・ファイルは、データの変更または潜在的な変更を記録するSQL文を記録し、ディスクにバイナリ形式で保存します.データベースの変更履歴(特定の時点ですべてのSQL操作)、データベースのインクリメンタル・バックアップとリカバリ(インクリメンタル・バックアップとポイント・ベースのリカバリ)、Mysqlのレプリケーション(プライマリ・プライマリ・データベースのレプリケーション、プライマリ・スレーブ・データベースのレプリケーション)を表示できます.
2.3種類の書式
1).Statement:データが変更されるsqlはbinlogに記録されます.利点:各行の変化を記録する必要がなく、binlogログ量を減らし、IOを節約し、性能を向上させる.(rowに比べてどれだけのパフォーマンスとログ量を節約できるかは、アプリケーションのSQLの場合によって異なり、通常同じレコードを変更したり、rowフォーマットを挿入したりして生成されるログ量はStatementで生成されるログ量よりも小さいが、条件付きupdate操作や、テーブル全体の削除、alterテーブルなどの操作を考慮すると、ROWフォーマットは大量のログを生成するため、ROWフォーマットを使用するかどうかを考慮するログはアプリケーションの実際の状況に従って、ログの量がどれだけ増加するか、IOのパフォーマンスの問題をもたらす必要があります.)欠点:記録されているのは実行文だけで、これらの文がslave上で正しく実行されるために、各文が実行されたときの関連情報を記録して、すべての文がslaveでmaster側で実行されたときと同じ結果を得ることができることを保証する必要があります.またmysqlのレプリケーションは、特定の関数機能のように、slaveがmaster上で一致するようにするには、sleep()関数、last_などの多くの関連問題があります.insert_id()およびuser-defined functions(udf)に問題が発生する.次の関数を使用する文もコピーできません.
まとめ:mysqlのbinlogはマルチファイルストレージで、1つのLogEventを位置決めするにはbinlog filename+binlog positionを通じてmysqlのbinlogデータフォーマットを位置決めする必要があり、生成の方式によって、主にstatement-based、row-based、mixedに分けられる.
binlog機能をオンにするには、/etc/mysql/my.cnfには、
[mysqld] # server-id=1918 log_bin=mysql-bin binlog_format=ROW
という内容が加わっています.mysql binlog