MySQL
JSON
Aurora
Maxwell

Maxwellを使ってMySQLのバイナリログをJSON形式で出力する

More than 1 year has passed since last update.

Maxwellを利用し、MySQL/Auroraのバイナリログ(binlog)を読み込み、JSON形式で出力することが可能です。

Maxwellのダウンロード

以下のサイトからMaxwellをダウンロードできます。
https://github.com/zendesk/maxwell/releases/download/v1.10.8/maxwell-1.10.8.tar.gz

$ curl -sLo - https://github.com/zendesk/maxwell/releases/download/v1.10.8/maxwell-1.10.8.tar.gz | tar zxvf -

MySQL/Aurora側の設定

1.バイナリログ形式を「ROW」(行に基づくロギング)に変更する。

$ vi my.cnf

[mysqld]
server-id=1
log-bin=master
binlog_format=row

RDSを利用する場合、パラメータグループを変更します。
2017-10-22_124048.jpg

2.MySQL/AuroraにてMaxwellユーザを作成し、権限を付与します。

mysql> CREATE USER 'maxwell' identified by 'password';
mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE on *.* to 'maxwell' identified by 'password';
mysql> GRANT ALL on maxwell.* to 'maxwell';

Maxwellの起動

以下のコマンドを利用し、STDOUT(標準出力)モードでMaxwellを起動します。

$ cd maxwell-1.10.8
$ bin/maxwell --user='maxwell' --password='password' --host='xxxxxxxx.rds.amazonaws.com' --producer=stdout

JSON形式binlogの出力

動作確認としてMySQL側以下のSQLを発行します。

mysql> INSERT INTO user_info VALUES (0, 'admin', 'password', 'admin@myApp.com');
Query OK, 1 row affected (0.01 sec)

mysql> update user_info set username='user', email='user@myApp.com';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> delete from user_info;
Query OK, 1 row affected (0.01 sec)

以下のJSONが出力されます。

{"database":"test_db","table":"user_info","type":"insert","ts":1508315079,"xid":929,"commit":true,"data":{"id":0,"username":"admin","password":"password","email":"admin@myApp.com"}}
{"database":"test_db","table":"user_info","type":"update","ts":1508315160,"xid":1012,"commit":true,"data":{"id":0,"username":"user","password":"password","email":"user@myApp.com"},"old":{"username":"admin","email":"admin@myApp.com"}}
{"database":"test_db","table":"user_info","type":"delete","ts":1508315171,"xid":1018,"commit":true,"data":{"id":0,"username":"user","password":"password","email":"user@myApp.com"}}

引用

http://maxwells-daemon.io/quickstart/