バイナリログ転送ツール bingo

前回のエントリから相当間が空いてしまいました。
ネタがあればちゃんと書いていきたい所です。

で、タイトルの通り bingo というアプリケーションをリリースしました。

何をするアプリケーションかと言いますと、
MySQLのバイナリログ(更新差分)を簡単にリアルタイム転送するツール、です。

MySQL to MySQLであればMySQLのレプリケーションでいいじゃん、となるのですが
例えばBigQuery等にリアルタイムでデータ転送しようと思うと結構面倒くさいと思います。
(トリガーを使ったり、短時間毎に差分を取得したり。。)

bingo はMySQLのレプリケーション技術で更新データを読み取りますので、
非同期ではありますが、ほぼリアルタイムに更新データを取得できます。
現状はfluentdにhttp postする事しか出来ませんが、色々と応用できるとは思います。

使い方(詳しくはREADMEへ)

bingoは起動するとすぐにMySQLに接続します。

$ bingo
2016/09/02 01:19:10 connected to mysql(root@127.0.0.1:3306)
2016/09/02 01:19:10 start reading binlog
2016/09/02 01:19:10     Binlog Version:  4
2016/09/02 01:19:10     Server Version:  5.7.14-log

MySQLに何かしらデータを書き込みます。

$ mysql -u root -e 'create database testdb default character set utf8mb4'
$ mysql -u root -e 'create table testdb.testtable (id bigint, name varchar(32))'
$ mysql -u root -e 'insert into testdb.testtable (id, name) values (1, "hello world")'
$ mysql -u root -e 'insert into testdb.testtable (id, name) values (2, "はろーわーるど")'

localhost:8888 で待ち受けるfluentdにはこんな感じでデータがpostされます。

2016-09-02 01:23:28 -0400 bingo.data: {"database":"testdb","table":"testtable","columns":["1","hello world"]}
2016-09-02 01:23:36 -0400 bingo.data: {"database":"testdb","table":"testtable","columns":["2","はろーわーるど"]}

余力があればカラム名つきでpostするような実装を入れたいところですが、ひとまずはここまで。
テストも途中からほとんど書けていないのでこれもIssueですね。。