LoginSignup
3
1

More than 5 years have passed since last update.

MySQL binlog を眺める

Last updated at Posted at 2018-01-22

MySQL では binlog が replication の柱になっている。mysqlbinlog コマンドで状態が確認できる

Group Replication での設定を基本に、動作を確認してみる。

test1.cnf
[mysqld]
basedir=/usr
datadir=/var/tmp/test1

port=24801
socket=/var/tmp/test1.sock

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="127.0.0.1:24901"
loose-group_replication_group_seeds= "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"
loose-group_replication_bootstrap_group=off

binlog_rows_query_log_events=TRUE

簡単にセットアップするなら次の 2 行で(Ubuntu での下ごしらえ参照)。

mysqld --defaults-file=test1.cnf --initialize-insecure
mysqld --defaults-file=test1.cnf

mysqlbinlog でログを眺める。

  • 通常はファイルを読み取って STDOUT に表示する。
  • -R で remote server から読み取って STDOUT に表示するようにスイッチできる。接続先のオプションは必要。
    • --raw を付けると remote server から読み取ったものを再び手元のディスクに書き出せる。
    • --stop-never を付けるとストリーミング動作する。
  • binlog の中身は BINLOG 文で入っている(構文)。BINLOG 文の中身をさらに疑似 SQL にデコードして表示できる。
mysqlbinlog -vv -R --stop-never -S /var/tmp/test1.sock -uroot ""

binlog の動作モードで、組み合わせがいくつかあるので、要件は確認してからパターンを探すべし。

See also

  • MySQL 5.7 source tree の中に libbinlogstandalone が準備されている。
    • この前身として libbinlogevents というライブラリが、かつて MySQL labs で公開されていたらしい
    • さらにその昔は libreplication と呼ばれていたらしい。
    • libreplication の API は binlog API とも呼ばれていたらしい
    • で、libbinlogstandalone は、ソースからビルドするとライブラリが生成される。生成されるのだがインストールされない。パッケージでインストールではこれが入らないのが難点。
  • maxwell という java で動作するプログラムがある。binlog のストリームを json ストリームとして眺めることもできる。
  • python-mysql-replication
    • python ライブラリ
    • pymysql 依存
    • これに依存したプロジェクト多数
  • kodama
    • ruby 実装
  • binlog-parser
    • golang 実装
    • outdated
    • 動作させられなかった
  • ybinlogp
    • C 実装 make する
    • シンプルに binlog ファイルを読む機能のみ
    • テキスト出力も構造化されていない

Ubuntu での下ごしらえ

Ubuntu mysql-server パッケージでバイナリを準備するのが簡単。ただしパッケージ版は mysqld の書き込み先が AppArmor で制限されている。上記の例を実行するには、いったん解除するのが簡単。

systemctl stop apparmor
/etc/init.d/apparmor teardown
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1