This is a fork (converted to git) from https://bitbucket.org/winebarrel/ruby-binlog
ruby-binlog is Ruby binding for MySQL Binary log API.
- http://www.oscon.com/oscon2011/public/schedule/detail/18785
- https://launchpad.net/mysql-replication-listener
gem install ruby-binlog
- SUPER
- REPLICATION SLAVE
- EVENT
#!/usr/bin/env rubyrequire"rubygems"require"binlog"require"pstore"
$db =PStore.new("/tmp/foo")#master_log_file = "mysql-bin.000001"#master_log_pos = 4master_log_file=nilmaster_log_pos=nil
$db.transactiondomaster_log_file= $db["master_log_file"]master_log_pos= $db["master_log_pos"]enddefsave_position(master_log_file,master_log_pos)
$db.transactiondo
$db["master_log_file"]=master_log_file
$db["master_log_pos"]=master_log_posendendbegin# XXX: Do not reuse a client instance, after connection goes out.client=Binlog::Client.new("mysql://repl:repl@example.com")sleep0.3untilclient.connectifmaster_log_fileandmaster_log_posclient.set_position(master_log_file,master_log_pos)elsifmaster_log_posclient.position=master_log_posendwhileevent=client.wait_for_next_eventputs"(#{event.event_type})"master_log_pos=event.next_positioncaseeventwhenBinlog::QueryEventputsevent.db_nameputsevent.querysave_position(master_log_file,master_log_pos)whenBinlog::RowEventputsevent.event_typeputsevent.db_nameputsevent.table_namepevent.columnspevent.rowssave_position(master_log_file,master_log_pos)whenBinlog::RotateEventmaster_log_file=event.binlog_filemaster_log_pos=event.binlog_possave_position(master_log_file,master_log_pos)endendrescueBinlog::Error=>eputseretryifclient.closed?raiseeendThe following type are not supported in row mode.
- ENUM
- SET
- GEOMETRY