# fluent-plugin-mysql
## Component
### MysqlOutput
[Fluentd](http://fluentd.org) plugin to store mysql tables over SQL, to each columns per values, or to single column as json.
## Configuration
### MysqlOutput
MysqlOutput needs MySQL server's host/port/database/username/password, and INSERT format as SQL, or as table name and columns.
type mysql
host master.db.service.local
# port 3306 # default
database application_logs
username myuser
password mypass
key_names status,bytes,vhost,path,rhost,agent,referer
sql INSERT INTO accesslog (status,bytes,vhost,path,rhost,agent,referer) VALUES (?,?,?,?,?,?,?)
flush_interval 5s
type mysql
host master.db.service.local
database application_logs
username myuser
password mypass
key_names status,bytes,vhost,path,rhost,agent,referer
table accesslog
# 'columns' names order must be same with 'key_names'
columns status,bytes,vhost,path,rhost,agent,referer
flush_interval 5s
Or, insert json into single column.
type mysql
host master.db.service.local
database application_logs
username root
table accesslog
columns jsondata
format json
flush_interval 5s
To include time/tag into output, use `include_time_key` and `include_tag_key`, like this:
type mysql
host my.mysql.local
database anydatabase
username yourusername
password secret
include_time_key yes
### default `time_format` is ISO-8601
# time_format %Y%m%d-%H%M%S
### default `time_key` is 'time'
# time_key timekey
include_tag_key yes
### default `tag_key` is 'tag'
# tag_key tagkey
table anydata
key_names time,tag,field1,field2,field3,field4
sql INSERT INTO baz (coltime,coltag,col1,col2,col3,col4) VALUES (?,?,?,?,?,?)
Or, for json:
type mysql
host database.local
database foo
username root
include_time_key yes
utc # with UTC timezone output (default: localtime)
time_format %Y%m%d-%H%M%S
time_key timeattr
include_tag_key yes
tag_key tagattr
table accesslog
columns jsondata
format json
#=> inserted json data into column 'jsondata' with addtional attribute 'timeattr' and 'tagattr'
### JsonPath format
You can use [JsonPath](http://goessner.net/articles/JsonPath/) selectors as key_names, such as:
type mysql
host database.local
database foo
username bar
include_time_key yes
utc
include_tag_key yes
table baz
format jsonpath
key_names time, tag, id, data.name, tags[0]
sql INSERT INTO baz (coltime,coltag,id,name,tag1) VALUES (?,?,?,?,?)
Which for a record like:
`{ 'id' => 15, 'data'=> {'name' => 'jsonpath' }, 'tags' => ['unit', 'simple'] }`
will generate the following insert values:
`('2012-12-17T01:23:45Z','test',15,'jsonpath','unit')`
## Prerequisites
`fluent-plugin-mysql` uses `mysql2` gem, and `mysql2` links against `libmysqlclient`. See [Installing](https://github.com/brianmario/mysql2#installing) for its installation.
## TODO
* implement 'tag_mapped'
* dynamic tag based table selection
## Copyright
* Copyright
* Copyright(C) 2016- TAGOMORI Satoshi (tagomoris)
* License
* Apache License, Version 2.0