ーぽーの日々スマートフォン用の表示で見るぱーぽーの日々2017-11-11MySQLのバイナリログについて調べたMySQL何となくでMySQLを使っているところがあるので、それなりに機能を理解しながら使っていきたいお気持ち。そんな中で最近バイナリログについて調べていたのでその内容をメモしておく。バイナリログについてバイナリログには、テーブルやデータの更新操作が格納される。(SELECTやSHOWのような読み込み操作は格納されず、それらを含めた全ての操作が見たい場合は一般クエリログを使用する。)バイナリログへの書き込みは、SQL文の実行が完了し、トランザクションをCOMMITしたときに行われる。バイナリログはデフォルトでは生成されないので、設定ファイル(my.cnfなど)にlog-binやserver-idを追加する必要がある。レプリケーションやデータのリカバリに利用される。バイナリログの見方mysqlbinlogコマンドでファイルを指定すれば見れる。ちなみにこのコマンドを使ったときにこんなことがあった。最初は--no-defaultsで回避していたけど、looseプリフィックスというのがあることを教えてもらった。こっちで回避するのが正しいっぽい。Twitterで教えてもらった1時間後くらいにブログにもまとめていただいて、ホント神か〜って感じだ。yoku0825.blogspot.jpバイナリログ形式について以下の3種類がある。MySQLのバージョンによってデフォルト値が異なり、例えば5.7の場合はROWがデフォルト。binlog_formatで設定することができる。STATEMENT実行されたSQL文をそのまま記録する。以下のようなテーブル生成とデータ追加をする。sec)すると、ログには以下のように記録される。***/このバイナリログ形式は、ログのデータ量が少ないメリットがあるが、非決定的なSQL文の場合にレプリケーションがうまくいかないデメリットがある。先ほどINSERTしたときに非決定的な関数sysdate()が含まれていたので以下のような警告が出る。|+-------+------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ROW実行されたSQL文によるデータの変化を記録する。以下のようなテーブル生成とデータ追加をする。sec)すると、ログには以下のように記録される。***/これだとよく分からないので、--base64-output=decode-rowsと-vを使っていい感じにする。***/このバイナリログ形式は、STATEMENTと比べるとデータ量が増えるデメリットがあるが、非決定的なSQL文を考慮する必要がなくなるメリットがある。レプリケーションも問題なくできる。MIXEDSTATEMENTとROWを組み合わせたやつ。基本的にはSTATEMENTだが、特定の条件下(非決定的な関数が含まれる場合)ではROWとなる。以下のようなテーブル生成とデータ追加×2をする。sec)すると、ログには以下のように記録される。***/このバイナリログ形式は、STATEMENTとROWのいいとこ取りなのでデメリットはない(?)まとめ目的にあった設定をすべきだろうが、個人的な意見としては、MIXEDを選んでおくのが無難なのかなと思った。2017の15日目の記事です。»プロフィールid:purple_jwlプログラミングやボードゲームなど、自分の好きなことを書くブログです。(12)月別アーカイブはてなブログをはじめよう!purple_jwlさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。